一、Hibernate核心配置文件重要属性(hibernate.cfg.xml)
(1):hibernate.hbm2ddl.auto
create :执行数据库操作前先删除原有表,在重新建一张新表.
create-drop :每次执行数据库操作要经过删除原有表,建立新表,执行完再删除表的过程. 执行完的标志是SessionFactory关闭.
update :如果数据库中有指定表,则使用该表;否则,建立新表. 如果某一字段在表中不存在,则会在表中产生新字段.
validate :不建立表,只会检查旧表,如果配置不一致则会报错.
前两种一般用于测试.
(2):hibernate.dialect
高版本MySQL数据库使用上面的create来使用DDL创建数据库可能会报错,要修改一下hibernate的方言:
org.hibernate.dialect.MySQL5Dialect
二、主键的生成策略(xxx.hbm.xml)
increment:使用hibernate的自增长策略,先查找当前主键的最大值,然后在此上面加一,存在线程安全问题。
identity:使用数据库的自增长策略,不适用于Oracle。
sequence:应用于Oracle数据库。
native:根据本地策略,数据库不同,选择identity或sequence。
uuid:采用随机字符串作为主键。
assigned:hibernate不维护主键,由程序生成。
三、Session的load和get方法
不同之处:(1)、get获取的是真实的持久类对象,而load获取的是代理对象。
(2)、load采用延迟加载(lazy),只有真正使用持久类对象时才会发送sql语句;而get方法使用时会立即发送sql。
(3)、load根据一个不存在主键查询时,会抛出ObjectNotFound异常,而get可能会抛出NullPointerException。
四、hibernate的API
Configuration:负责管理hibernate的配置信息。
hibernate的核心配置有两种方式:hibernate.cfg.xml或xxx.properties
所以Configuration对象提供了多种configure方法的重载,空参的configure方法就是默认加载hibernate.cfg.xml文件。
hibernate的映射文件配置:xxx.hbm.xml
当使用xxx.properties作为核心配置文件时,就无法使用mapping标签对映射文件进行关联,
这时要使用:
configuration.addResource("cn/itcast/hibernate3/demo1/Customer.hbm.xml");
或:
configuration.addClass(持久类.class);
SessionFactory
该对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句,该对象是线程安全的,还负责维护Hibernate的二级缓存,对象根据数据库信息,维护连接池,负责创建Session(相当于Connection)对象.
在Hibernate中使用c3p0连接池:
* 引入c3p0的jar包
* 在核心配置中添加一段配置:
org.hibernate.connection.C3P0ConnectionProvider
5
20
120
3000
Session
相当于JDBC的Connection,是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心。它是线程不安全的,Session维护了Hiberante一级缓存.
Transaction
hibernate的增删改都是建立在事务的基础上的,如果没开启事务,那么操作是无效的。
五、Hibernate的三种查询方式
HQL :hibernate query language
QBC :Query By Criteria
Sql :structured query language
六、记点英语
ORM:Object Relational Mapping
JPA:Java Persistence Api
miscellaneous :杂七杂八的
tips and tricks :小贴士
semantic :语义的