第二章 Hibernate进阶
2-2 Hibernate常用配置
2-3 session简介
hibernate的执行流程
什么是session
- hibernate不建议直接使用jdbc的connection炒作数据库,而是通过使用session操作数据库。session可以理解为操作数据库的对象。
- session与connection,是多对一的关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。
- 把对象保存在关系数据库中需要调用session的各种方法,如:save(),update(),delete(),creatQuery()等。
2-4 transaction简介
- 什么是transaction
- hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
- 如果你想让hibernate像JDBC那样自动提交事务,必须调用session对象的doWork()方法,获得JDBC的connection后,设置其为自动提交事务模式。(注意:通常并不推荐这样做)
2-6 session详解
如何获得session对象
- SessionFactory的openSession方法
- SessionFactory的getCurrentSession方法
openSession与getCurrentSession的区别
- getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
- openSesion每次创建新的session对象,getCurrentSession使用现有的session对象。
2-7 hbm配置文档
hbm配置文档常用注释
![]()
![]()
常见的主键生成策略
第三章 Hibernate单表操作
3-2 单一主键
- 单一主键是指由表单中的某一列充当主键,还有复合主键。
- MySQL的常用主键生成策略
- assigned:有Java应用程序负责生成(手工赋值)。
- native:由底层数据库自动生成标识符,如果是MySQL就是increment(自动增长),如果是Oracle就是sequence(序列),等等。
3-3 hibernate基本数据类型
时间类型
3-4 对象类型
- Mysql不支持标准的SQL的CLOB类型,在MySQL中,用TEXT,MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据。
创建BLOB对象
读取数据库中的BLOB类型数据
3-5主键属性
3-6 单表增删改查实例
get和load方法
- get与load的区别
- 在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出SQL语句,返回持久化对象。
load方法会在调用后返回一个代理对象。该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出SQL语句。- 查询数据库中不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException
Update方法
Delete方法