Hibernate学习笔记之二
hibernate的执行流程

- Configuration对象读取hibernate.cfg.xml文件,创建SessionFactory对象
- SessionFactory对象读取加载的对象-关系映射文件,以此创建Session对象
- Session对象实现数据库的增删改查,需要开启事务,封装在事务当中
- 最后需要提交事务并关闭SessionFactory和Session
session简介
- 不建议使用jdbc的connection对象操作数据库,而使用session来操作数据库
- session与connection是多对一的关系,多个session对应一个connection
- 把对象保存到数据库中需要调用session的各种方法,如:sava()、update()、delete()、createQuery()等。
transaction简介
- hibernate对数据的操作都是封装在事务中,默认非自动提交(可以调用session对象的doWork()方法获得jdbc的connection后,设置为自动提交事务模式,不建议)
session详解
如何获得session对象
- openSession()或者getCurrentSession()(使用getCurrentSession()需要在hibernate.cfg.xml文件中进行相应配置)
<property name="hibernate.current_session.context_class">thread|jta</property>
//thread本地事务(jdbc事务)
//jta全局事务(jta事务)
-
openSession()与getCurrentSession()区别
1)getCurrentSession()在事务提交或者回滚后自动关闭,而openSession()需要手动关闭。openSession()未手动关闭,多次之后会导致连接池溢出。
2)openSession()每次新建新的session对象,getCurrentSession()每次使用已有的session对象。
hbm配置文档常用设置
<hibernate-mapping
schema="schemaName" //模式名称
catalog="catalogName" //目录名称
default-cascade="cascade_style" //级联风格
default-access="field|property|ClassName" //访问策略
default-lazy="true|false" //加载策略
package="packageName" //包名
/>
<class
name="ClassName" //类名
table="tableName" //对应的表名
batch-size="N" //抓取策略,一次抓取N条记录
where="condition" //抓取条件
entity-name="EntityName" //支持同一个类映射多个表
/>
<id //表的主键
name="propertyName" //映射的属性
type="typeName" //映射的属性的数据类型
column="column_name" //映射的数据库中字段名称
length="length" //字段长度
<generator class="GeneratorClass"/> //主键生成策略
/>
主键生成策略