Hibernate学习笔记
(1)Configuration cfg = new Configuration().configure();通过该语句读取Hibernate的配置文件hibernate.cfg.xml。hibernate.cfg.xml配置可以参考hibernate.properties.
(2)如何创建数据库
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
效果:对应数据库中产生了相应的表。
(3)对象的操作步骤
读取hibernate.cfg.xml配置文件;
创建SessionFactory对象
通过SessionFactory对象得到Session对象
开始Session对象事务
对对象进行相应的CRUD操作
提交事务,当发生异常时进行回滚
关闭Session对象
(4)查询数据时get与load方法的区别
当可以查到数据时,load方法采用延迟加载的方式,即在用到对象的时候也产生SQL语句。当查找空数据库时,get方法会抛NullPointException异常,而load会抛ObjectNotFoundException异常。
load的方法是生成一个继承类的方式加载的,所以对于实体类的设计不能为final。
(5)transient、persistent、dispatched状态区别
transient:数据库中没有与之匹配的数据项,没有纳入session管理
persistent:在数据库中有与之匹配的对象,纳入session管理,在清理缓存的时候(脏数据检查)时候,会和数据库同步。
dispatched:在数据库中有与之匹配的记录,没有纳入session管理。
(6)查询数据集
Query query= session.createQuery("from User");
List userList = query.list();
通过创建Query得到一个query对象,再通过其list方法返回一个List对象,通过Iterator迭代器获得list对象内容。
(3)理解常见的几种映射关系(关键在于设计实体类的时候持有对方引用)
多对一关联映射_单向
<may-to-one name="">注意字段名与数据库关键字冲突问题
多对一关联映射_双向
在“一”端的配置文件中
<set name="students" inverse="true" cascade="all">
<key column="多端对应字段"/>
<one-to-many class="多端类"/>
</set>
inverse和cascade
* inverse是关联关系的控制方向
* cascade操作上的连锁反应
在读取数据的时候首先也是获得一个Set对象,再通过Iterator迭代。
一对一主键关联映射_单向
<id name="id">
<!-- person的主键来源idCard,也就是共享idCard的主键 -->
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<!-- one-to-one标签的含义,指示hibernate怎么加载它的关联对象,默认根据主键加载,
constrained="true",表明当前主键上存在一个约束,person的主键作为外键参照了idCard
-->
<one-to-one name="idCard" constrained="true"/>
一对一主键关联映射_双向
<class name="com.bjsxt.hibernate.Person" table="t_person">
<id name="id">
<!--Person主键是从IdCard主键获取的 -->
<generator class="foreign">
<!--property属性是固定的-->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
<class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<!--进行双向关联映射-->
<one-to-one name="person"/>
</class>
一对一惟一外键关联映射_单向
<may-to-one/>的一种特例在该标签中加入unique="true"
一对一惟一外键关联映射_双向
在另一个实体类中持有对方引用,同时配置文件
<!--property-ref属性指定需要关联的字段-->
<one-to-one name="person" property-ref="idCard"/>