`

Hibernate学习笔记(一)

阅读更多

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"/>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics