结果在判断c是否与d相等时 出现了false。 这是因为Integer类源码中有一个IntegerCache,这一个私有的内部类。这个类缓存了-128到 127之间数字的包装类。...需要记住它把一些数字的包装类提前缓存了,如果判断成立就把缓存中的那个包装类返回,如果不则new一个新的。 ? 可以看到判断缓存中是否存在,不存在new一个返回。...而我们 上边进行 = 和 == 的过程其实就是 java编译器把原始类行自动转换为封装类型的过程称之为**自动装箱**,相当于调用了上边所说的valueOf()方法。...所以如果进行比较的话最好使用equals方法来比较 在阿里开发手册中也有说到: ?
例如: 如图,student表和teacher表共同具有id,name,age等字段,而我们的继承映射就是这样的一个思想,抽象出这些共有的字段为一张父表,让子表对其进行继承,这样就可以大大降低我们实体类代码的冗余性...Hibernate支持以下三种数据表的生成策略: 每个类分层结构一张表 每个子类一张表 每个具体类一张表 一、每个类分层结构一张表 对于这种数据表的生成策略,最终Hibernate会在数据库中生成一张数据表..., newTable是一张综合的表,主要由student表和teacher表集成而来,对应于student表的记录salary字段的值为空,对应于teacher表记录的grade字段值为空。...二、每个具体类映射成一张表 这种数据表的生成策略会为每个实体类生成一张数据表,就上述例子而言,会为person,student,teacher都生成一张表。...joined-subclass来配置继承子类,在Hibernate生成数据表的时候会将student和teacher表的主键作为外键关联父表的主键。
第二部分 数据类型映射 在Hibernate的映射文件中,用标签来说明POJO类的属性与数据库表中的哪一个字段对应,用type属性说明对应属性应该使用什么数据类型。...在实际应用中,存在这样一种情况:有很多种学生,如研究生、本科生等,它们都有学生的基本属性,但又有各自的特殊属性,故适合使用继承来实现这样的对象模型。 例如,学生POJO类Xs.java代码为: ?...现在就要考虑继承关系在数据库中建表的问题了,这种情况可以有3中方法来设计数据库: 1.每个子类一个数据表 2.每个类一个数据表 3.共享一个数据库表 一 每个子类一个数据表 设计两张数据库表,分别是yjs...二 每个类一个数据表 【实例8.1】采用“每个类一个数据表”的方式,实现继承关系映射。 创建Java项目,命名为“Inheritance_mapping”。...第四部分 动态类的使用 前面的例子都是使用Java代码的POJO类作为对象模型,其实Hibernate还支持在XML文件中直接表示持久化数据类,这样的好处是便于开发人员对程序的维护。 ? ? ? ?
如果不是此方面的需求建议取值设为none 可选参数 create 启动时删数据库中的表,然后创建,退出时不删除数据表 create-drop 启动时删数据库中的表,然后创建,退出时删除数据表,如果表不存在报错...@Table 声明表名 @Id 指定的类的属性,用于识别(一个表中的主键)。...@MappedSupperclass 用来申明一个超类,继承这个类的子类映射时要映射此类中的字段 @CreationTimestamp 数据库做插入时,自动填充时间 @UpdateTimestamp...数据库有更新时,自动更新时间 本例只用一个entity来演示,因此没有涉及到表与表的关联,常用表与表之间的关联注解如下 @JoinColumn 指定一个实体组织或实体的集合。...即如果要更新的bean中的字段,存在null值,原生的SimpleJpaRepository进行更新操作时,会把null值更新进数据库,而有时候业务上我们不需要这样,因此可以重写SimpleJpaRepository
”,类与类之间有继承关系,Hibernate中也对这种继承关系提供了映射的封装。 ...Hibernate为继承映射提供了三种策略 1、每棵继承树使用一张表 2、每个子类使用一张表 3、每个具体类使用一张表 本文对第一种策略进行说明。...上图中Pig类和Bird类继承Animal类,每棵继承树对应一张表,即在同一棵继承树中,所有的类的对象信息(记录)共同存放到一张表中,要判断某条记录属于哪个对象,需要在表中添加一个字段进行区分(比如下表的...插入父类(Animal)时,默认把类名当做type了 查询测试 ---- load查询 根据配置,鉴别值(表中的type)在存储的时候会自动存储,在加载的时候也会根据鉴别值映射取得相应的对象。...,但是粒度比较粗,有冗余字段;但又是因为多个类的相关记录都存放在一张表中,查询时不用关联,因此效率较高。
组件映射 Java主要的类主要有两种方式 组合关系,组合关系对应的就是组件映射 继承关系,继承关系对应的就是继承映射 组件映射实际上就是将组合关系的数据映射成一张表,组件类和被包含的组件类映射成一张表...这里写图片描述 ---- 每个类映射一张表(3张表) 父类和子类都各对应一张表。...这里写图片描述 ---- (推荐)每个子类映射一张表, 父类不对应表(2张表) 使用过了一张表保存所有子类的数据,这不符合数据库设计规范 每个子类、父类都拥有一张表..表结构太过于繁琐..添加信息时,过多的...SQL 我们即将使用的是:每个子类映射成一张表,父类不对应表…这和我们传统方式继承是一样的。...表的结构太过繁琐 插入数据时要生成SQL至少就要两条 子类拥有自己的表、父类不对应表【推荐】union-subclass 父类不对应表要使用abstract来修饰 主键的id不能使用自增长策略,修改成
对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: 说明: 因为类继承树肯定是对应多个类,要把多个类的信息存放在一张表中,必须有某种机制来区分哪些记录是属于哪个类的。...关于鉴别值在存储的时候hibernate会自动存储,在加载的时候会根据鉴别值取得相关的对象 (二)每个类一张表 关系模型如下: 映射文件如下: <hibernate-mapping package="com.nnngu...父类、子类,每个类都对应一张数据库表。 在父类对应的数据库表中,实际上会存储所有的记录,包括父类和子类的记录;在子类对应的数据库表中,这个表只定义了子类中所特有的属性映射的字段。...每个子类对应一张表,而且这个表的信息是完备的,即包含了所有从父类继承下来的属性映射的字段(这就是它跟joined-subclass的不同之处,joined-subclass定义的子类的表,只包含子类特有属性映射的字段
包下新建接口,继承 Repository 或其子接口 在该步骤之前我们先需要编写实体,如我们声明的接口中 Person 类,其所需的配置和注解同时也可以参看以前的博文(一篇 JPA 总结)。...在 maven 项目的 test 目录下新建测试类测试 getPersonByPersonName(String personName) 方法(自动生成的数据表中已加入数据,Person 表和 Address...Repository 子接口 Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类 CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法 PagingAndSortingRepository...注意:默认情况下,SpringData 的每个方法上都有事务,但都是一个只读事务,他们不能完成修改操作 ?...举例(查找某表所有的内容,使用 CURDRepository 可以快速实现) 实现 CURDRepository 接口 ? 使用 findall() 方法 ?
该参数的几种配置如下: create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因...create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。...update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行...validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。...JpaRepository需要传入两个参数,一个是实体类User一个是主键的类型Long,而凡是继承了JpaRepository类的就会自动实现很多内置的方法,包括增删改查,以及使用默认支持的Pageable
在Hibernate中,继承关系的映射可以使用三种方式,分别是单表继承、多表继承和一对一继承。...在Hibernate中,继承关系的映射方式主要有三种,分别是单表继承、多表继承和一对一继承。单表继承在单表继承中,继承关系的子类和父类使用同一个表。...子类和父类有共同的属性,而子类定义的新属性,则沿用父类的属性,使用null来填充该属性。在映射到数据库时,使用表中的一个自增长id来区分子类和父类实体。...一对一继承一对一继承是指每个实体类映射到一个表中,同时每个表之间具有一对一的关系映射。在这种情形中,父子之间并不会共享某些字段,因此,嵌套不是必须的。...二、单表继承映射示例在本文中,我们将从单表继承开始,展示如何使用Hibernate实现继承关系的映射。下面是两个Java类,我们将使用这两个类来演示单表继承的映射。
4.2继承映射调优 尽管继承映射是领域对象的一部分,出于它的重要性我们将它单独出来。HRD [1]中的第9章“继承映射”已经说得很清楚了,所以我们将关注SQL生成和针对每个策略的调优建议。...; 优点包括数据表比较紧凑(没有不需要的可空字段),数据跨三个子类的表进行分区,容易使用超类的表与其他表进行关联。...4.2.4使用隐式多态实现每个具体类一张表 只需要三张表。对于Payment的多态查询生成三条独立的SQL语句,每个对应一个子类。...开始时,项目只有GasDeal和少数用户,它使用“每个类层次一张表”。 OilDeal和ElectricityDeal是后期产生更多业务需求后加入的。没有改变映射策略。...重新设计时我们使用了两张单独的表,分别针对气/油和电相关的属性。新的映射混合了“每个类层次一张表”和“每个子类一张表”。
lazy 值 true 使用懒加载 false 关闭懒加载 extra (在集合数据懒加载时候提升效率),在真正使用数据的时候才向数据库发送查询的sql;如果调用集合的size()/isEmpty...继承映射 需求:猫、猴子、动物。 所有子类映射到一张表 (1张表) 什么情况用? 子类教多,且子类较为简单,即只有个别属性! 好处:因为使用一个映射文件, 减少了映射文件的个数。...每个类映射一张表(3张表) 数据库 T_anmal (存储父类信息) 1 大花猫 T_cat (引用父类的主键) 1 抓小老鼠 T_monkey(引用父类的主键) Javabean...-- 继承映射, 每个类对应一张表(父类也对应表) --> <class name="Animal...总结: 所有的子类都写到一个映射文件; 父<em>类</em>不对应<em>表</em>; <em>每个</em>子类对应一张<em>表</em> <em>Hibernate</em>中映射: 多对一 一对多 多对多 一对一 (多对一<em>的</em>特殊应用) 组件 <em>继承</em>
,当从数据库 SELECT 时,自动把字段的值塞进 JavaBean 的对应属性里,当做 INSERT 或 UPDATE 时,自动把 JavaBean 的属性值绑定到 SQL 语句中。...☞ 高级特性 JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化...答案是否定的,也就是说,如果使用 JPA 规范进行数据库操作,底层需要 hibernate 作为其实现类完成数据持久化工作。 ?...♞ validate:加载 hibernate 时,验证创建数据库表结构; ♞ create:每次加载 hibernate,重新创建数据库表结构; ♞ create-drop:加载 hibernate...时创建,退出是删除表结构; ♞ update: 加载 hibernate 自动更新数据库结构。
与上篇文章不同的是,这里是每个“具体类”映射一张表,什么意思呢?就是让每个子类(具体的、有意义的类)映射一张表。 场景 ---- 与上篇文章场景一样,如下类图 ? ...父类还用标签来定义即可;用标签定义两个子类,且每个类对应的表的信息是完全的,包含了所有从父类继承下来的属性。...《【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表》中的测试一致。 ...如果追求细粒度的设计且子类数量不多,则可以用后两种方案:每个类映射一张表或每个具体类映射一张表。...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表》】
https://blog.csdn.net/huyuyang6688/article/details/50689003 上文说了每棵继承树映射一张表,本文继续描述让每个类都映射一张表的配置...上图中Pig类和Bird类继承Animal类,要让每个类映射一张表,就是让着三个类都分别映射一张表,但同时这三张表也跟对应的三个类似的,有继承关系,在父类对应的表中,实际上会存储所有子类对应的记录,如下表所示...所以对对象的操作同上篇文章《【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表》中的测试一致。...总结 ---- 缺点:查询时需要关联表,效率差;插入时也要执行多个insert语句,适合继承程度不深的情况。 优点:粒度较细,调理清楚,没有冗余。 ...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每个类映射一张表》】
该代理与被代理对象之间的关系是继承关系,与我们学的动态代理不是一种。所以不需要接口。...create-drop(极少):无论是否存在表结构。每次启动Hibernate都会重新创建表结构,每次Hibernate运行结束时,删除表结构。 ...基本类型无法表达null、数字类型的默认值为0。 包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。..." 表中列的数据长度 type="" 类型 unsaved-value (不常用)指定主键是什么值时,才当做null来处理 ...7.assigned 自己指定主键值,当表的主键是自然主键时使用 7策略是自然主键,由程序自己维护。
create :每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。...create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。...update :最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行...validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。...2.6 简单测试 创建 UserRepository01Test 测试类,我们来测试一下简单的 UserRepository01 的每个操作。
- 停止执行 6.7 ThreadLocal相关 ThreadLocal解决了变量并发访问的冲突问题 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本...这一思想表现为对继承机制的约束规范,只有子类能够替换其基类时,才能够保证系统在运行期内识别子类,这是保证继承复用的基础。...;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。...优点:无堆积 事先无需确定表长 删除结点易于实现 装载因子a>=1,缺点:需要额外空间 27.枚举类 JDK1.5出现 每个枚举值都需要调用一次构造函数 28.数组复制方法 for逐一复制 System.arraycopy...局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。
不操作 create-only 当使用嵌入式数据库且没有模式管理器时,此项为默认值。...配置值:指定实现 org.hibernate.boot.model.naming.ImplicitNamingStrategy 接口的类全名 默认值: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy...可选官方实现: 类名 说明 org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl 匹配JPA2.0标准的实现,使用...其他实现都继承于此类。 org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy 默认值。...匹配JPA1.0标准的实现 物理命名策略 将显式指定或隐式命名策略转换得到的逻辑名称转换为数据库实际使用的物理名称 配置路径:spring.jpa.hibernate.naming.physical-strategy
-- Name属性用于定义持久化单元的名字 (name必选,空值也合法) --> <!...对于properties 节点需要说明的是,各个应用服务器使用的持久化产品都不一样,如jboss使用的是hibernate,weblogic10使用的是kodo。..."的值设为“create-drop”,在实体发布及卸载时将自动创建及删除相应数据库表。 ...ps: 如果你的表已经存在,并且想保留数据,发布实体 bean 时可以把 hibernate.hbm2ddl.auto 的值设为 none 或update,以后为了实体 bean 的改动能反应到数据表...,建议使用 update,这样实体 Bean 添加一个属性时能同时在数据表增加相应字段。
领取专属 10元无门槛券
手把手带您无忧上云