首先,导入包:包含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测试实例,如果没抛异常就行了。
项目的目录结构如下: