一、获取Hibernate
hibernate最小jar包
antlr-2.7.6.jar、asm.jar、asm-attrs.jar、cglib-2.1.3.jar、commons-collections-2.1.1.jar
commons-logging-1.0.4.jar、dom4j-1.6.1.jar、ehcache-1.2.3.jar、hibernate3.jar、jta.jar、log4j-1.2.11.jar
二、Hibernate配置文件
Hibernate通过读取默认的XML配置文件hibernate.cfg.xml加载数据的配置信息,该配置文件被默认放于项目的classpath目录下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/db_database10</property>
<property name="connection.username">root</property>
<property name="connection.password">111</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/mr/employee/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
<property>元素的常用配置属性
方法 说明
connection.driver_class 连接数据库的驱动
connection.url 数据库连接的URL
connection.username 数据库连接用户名
connection.password 数据库连接密码
dialect Hibernate方言
show_sql 是否在控制台打印SQL语句
format_sql 是否格式化SQL语句
hbm2ddl.auto 是否自动生成数据库表
三、了解并编写持久类
在hibernate中持久化类是Hibernate操作的对象,也就是通过对象-关系映射(ORM)后数据库表所映射的实体类,用来描述数据库表的结构信息。持久类中的属性应该与数据库表的字段相匹配。
public class User {
private Integer id;
private String name;
private String password;
public User(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Hibernate中的持久类有4条5编程规则,
(1)、实现一个默认的构造器
以便Hibernate通过Constructor.newInstance()实例化类
(2)、提供一个标识属性(可选)
标识属性一般映射的是数据库表中的这键字段
(3)、使用非final类(可选)
如果使用了final类,Hibernate就不能使用延迟加载
(4)、属性声明访问器(可选)
持久化类的属性不能声明为public的,最好以private的set()和get()方法对属性进行持久化
四、Hibernate映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 产品信息字段配置信息 -->
<hibernate-mapping>
<class name="com.mr.User" table="tab_user">
<!-- 持久化类的唯一性标识 -->
<id name="id" column="id" type="int">
<generator class="native"/>
</id>
<property name="name" type="string" not-null="true" length="50">
<column name="name"/>
</property>
<property name="password" type="string" not-null="true" length="50">
<column name="password"/>
</property>
</class>
</hibernate-mapping>
持久化类映射文件<property>元素的常用配置属性
属性名称 说明
name 持久化类属性的名称,以小写字母开关
column 数据库字段名
type 数据库的字段类型
length 数据库字段定义的长度
not-null 该字段是否为空
unique 该数据库字段是唯一
lazy 是否延迟加载
五、hibernate主键策略
hibernate主键生成策略的常用配置属性
属性名称 说明
increment 用于为long、short或int类型生成唯一标识,在集群下不要使用该属性
identity 由底层数据库生成主键,前提是底层数据库支持自增字段类型
sequence 根据底层数据库的序列生成主键,前提是底层数据库支持序列
hilo 根据高/低算法生成,把特定表的字段作为高位值来源,在默认的情况下选用hibernate_unique_key表的next_hi字段
assigned 由程序负责主键生成,此时持久类的唯一标识不能声明为private
select 通过数据库触发器生成主键
foreign 使用另一个相关的对象的标识符,通常和<ono-to-one>一起使用。