①创建持久化Java类
· 提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类。
· 提供一个标识属性(identifier property): 通常映射为数据库表的主键字段. 如果没有该属性,一些功能将不起作用,如:Session.saveOrUpdate()。
· 为类的持久化类字段声明访问方法(get/set): Hibernate对JavaBeans 风格的属性实行持久化。
· 使用非 final 类: 在运行时生成代理是 Hibernate 的一个重要的功能. 如果持久化类没有实现任何接口, Hibnernate 使用 CGLIB 生成代理. 如果使用的是 final 类, 则无法生成 CGLIB 代理。
· 重写 eqauls 和 hashCode 方法: 如果需要把持久化类的实例放到 Set 中(当需要进行关联映射时), 则应该重写这两个方法。
注: Hibernate 不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染。这就是Hibernate被称为低侵入式设计的原因。
②创建对象-关系映射文件
· Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句。
· 映射文件的扩展名为 .hbm.xml。
· 映射文件说明
1)hibernate配置文件层次结构:
hibernate-mapping 映射对象标识符
~~class
· 在对象-关系映射文件中, 元素用来设置对象标识符. <generator>
子元素用来设定标识符生成器
· Hibernate提供的内置标识符生成器:
~~property
注:hibernate,java类型以及sql之间的对应关系
③创建Hibernate的配置文件
· Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需的各种属性每个 Hibernate 配置文件对应一个 Configuration 对象。
· Hibernate配置文件可以有两种格式: 1)hibernate.properties; 2)hibernate.cfg.xml (常用)
· Hibernate常用属性:
~~Jdbc 连接属性:
属性名 | 描述 |
---|---|
connection.url | 数据库URL |
connection.username | 数据库用户名 |
connection.password | 数据库密码 |
connection.driver_class | 数据库JDBC驱动 |
dialect | 配置数据库的方言,根据底层的数据库不同产生不同的 sql 语句,Hibernate 会针对数据库的特性在访问时进行优化 |
~~C3P0 数据库连接池属性:
属性名 | 描述 |
---|---|
hibernate.c3p0.max_size | 数据库连接池的最大连接数 |
hibernate.c3p0.min_size | 数据库连接池的最小连接数 |
hibernate.c3p0.timeout | 数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁 |
hibernate.c3p0.max_statements | 缓存 Statement 对象的数量 |
hibernate.c3p0.idle_test_period | 表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时.。 |
hibernate.c3p0.acquire_increment | 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接 |
show_sql | 是否将运行期生成的SQL输出到日志以供调试。取值 true |
format_sql | 是否将 SQL 转化为格式良好的 SQL . 取值 true |
hbm2ddl.auto | 在启动和停止时自动地创建,更新或删除数据库模式。取值 create |
hibernate.jdbc.fetch_size | 设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数。 |
hibernate.jdbc.batch_size | 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小。 |
注:hbm2ddl.auto 四个取值的意义:
* create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2次没有任何改变 ;
* create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除;
* update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行 ;
* validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值;