首先,导入包:包含hibernate/lib/required下的所有包和对应数据库连接驱动。
1. 创建数据库
Create database hibernate;
Use hibernate;
Create table student(id intprimary key auto_increment, name varchar(25) not null, age int);
Create table admin(id int primarykey auto_increment, name varchar(25) not null, age int);
2. 创建域对象
1)Student.java——编写hbm.xml
注意:为了创建对象方便,可以写一个带参的构造器,写带参的构造器一定要写无参的构造器。为了测试方便可以写一个toString()方法。这些都可以由eclipse自动生成。
public class Student {
private Long id;
private String name;
private Integer age;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) {this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
}
Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="edu.zhku.cian.model">
<class name="Student" table="student">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="name" column="name"/>
<property name="age" column="age"/>
</class>
</hibernate-mapping>
其中的: http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
要想提示,需要在Eclipse中关联这个文件,hibernate-mapping-3.0.dtd 可以在hibernate发布的包中搜索到,然后在Eclipse中,preference->xml->category添加映射:
如下图:
2)Admin.java——使用Annotation
Admin.java
@Entity
@Table(name="admin")
public class Admin {
private Long id;
private String name;
private Integer age;
@Id
@GeneratedValue()
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name;}
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age;}
}
其中
@Entity 表示该对象是对应与数据库中的表,是实体对象
@Table(name="admin") 表示对应于数据库中的admin表
@Id 放在get方法上面,表示是主键
@GeneratedValue() ID自增
3 编写hibernate.cfg.xml文件
关于这个文件,可以在开发文档中国找到例子,当然你也可以查看解压后projects/etc目录下的hibernate.cfg.xml文件。
另外,您还需要参见hibernate-configuration-3.0.dtd, 可以利用windows的搜索功能找到这个文件,然后关联到Eclipse中让其能够提示。
Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--
<!-- database connection setting -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">admin</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- JDBC connection pool (use the built-in) -->
<!-- <property name="connection.pool_size">1</property> -->
<!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> -->
<!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.internal.NoCacheProvider
</property>
<mapping resource="edu/zhku/cian/model/Student.hbm.xml"/>
<mapping class="edu.zhku.cian.model.Admin"/>
</session-factory>
</hibernate-configuration>
在上面我们也看到了:
这个是以两种方式加载这个配置,Hibernate需要通过这个配置来对实体类进行反射以及相关的操作。
数据库链接配置:
<!-- database connection setting -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">admin</property>
当然我们也可以通过另一种方式来配置这些项:
使用hibernate.properties文件:
hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://127.0.0.1:3306/hibernate
hibernate.connection.username root
hibernate.connection.password admin
将此文件置于classpath的根目录下。
4 编写测试用例
1)HibernateUtil.java
本类是一个单例对象,专门用于产生session factory, 由于Session Factory对象很大,要加载hibernate相关的配置文件,因此只需要在系统启动的时候创建一份实例就行了。
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
/**
* build the session factory with the hibernate.cfg.xml
* @return
*/
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
Configuration cfg = new Configuration();
// This is necessary, no setting of dialect will be warned
cfg.configure();
ServiceRegistry sr = new ServiceRegistryBuilder()
.applySettings(
cfg.getProperties()
).buildServiceRegistry();
SessionFactory sf = cfg.buildSessionFactory(sr);
return sf;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed!" + ex);
throw new ExceptionInInitializerError(ex);
}
}
public synchronized static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
注意:ServiceRegistry对象:hibernate 4.x 新增加的对象,hibernate的任何配置和服务都需要在该对象中注册中才能有效。
2)测试实例
public class AllTests {
@Test
public void testSave() {
Student student = new Student();
student.setId(1L);
student.setName("诸葛亮");
student.setAge(22);
SessionFactory sf =
HibernateUtil.getSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
session.save(student);
session.getTransaction().commit();
}
}
5 运行测试实例
点击运行Junit测试实例,如果没抛异常就行了。
项目的目录结构如下: