Hibernate入门小结          返回主页

Hibernate是一款使用简便,思想先进的ORM框架。本文就Hibernate的入门使用方法进行阐述与总结。

一。建立工程(本文以hibernate4.3.11为例)

  1. 首先建立版本为2.5的java web工程,命名为Hibernate4part1;
  2. 向WEB-INF的lib中导入必须的jar包,至少包含\hibernate-release-4.3.11.Final\lib\required目录下的所有jar包;

二。建立数据库及数据表

建立名为test的数据库并在其下建立名为person的数据表。建表脚本如下

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(10) NOT NULL,
  `address` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

简单说明:

1. 主键为id
2. 属性姓名
3. 属性年龄
4. 属性地址

三。建立实体类Person.java(省略get set方法)

public class Person {
 
    private int id;
    private String name;
    private int age;
    private String address;
 
    public Person() {
    }
 
    public Person(String name, int age, String address) {
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }
    ...

四。建立对象数据映射文件Person.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>
    <class name="com.hibernate.bean.Person" table="person">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>
        <property name="name" column="name"></property>
        <property name="age" column="age"></property>
        <property name="address" column="address"></property>
    </class>
</hibernate-mapping>
 
简单说明:
1. <hibernate-mapping>内为映射类
2. id为主键,用于标示唯一的的持久化实例
3. 实体类中的每一个属性都对应数据表的一个字段,即列属性

五。建立hibernate主配置文件

hibernate.cfg.xml用于配置访问数据库的一些参数,包括但不限于驱动、密码、数据库名、是否显示sql等。

常见主配置文件如下,已经包含必须的配置项:

<?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>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test??useUnicode=true&amp;characterEncoding=UTF-8</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>
        <!-- 数据库连接池大小 -->
        <property name="hibernate.connection.pool_size">10</property>
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
 
        <!-- 注册所有orm映射文件 -->
        <mapping resource="com/hibernate/cfg/Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
 
简单说明:
1. dialet为数据库方言,本文使用了mysql因此为org.hibernate.dialect.MySQLDialect
2. mapping标签中为注册orm映射文件,一般为所有的实体类对应的ORM

六。编写数据访问层Dao

  1. PersonDao接口 public interface PersonDao {
     //增加数据
     public void add();
     //查询所有数据
     public void getAll();
     //根据id查询
     public void getByID(int id);
    }
  2. 类PersonDaoImpl实现接口PersonDao public class PersonDaoImpl implements PersonDao {

     @Override
     @Test
     public void add() {
         Person person = new Person("小名", 10, "三里屯儿");
         // 建立session
         Session session = Hibernate4Util.getSessionFactoryInstance().openSession();
         // 开始事务
         Transaction transaction = session.beginTransaction();
     
         try {
             // 成功提交事务
             session.save(person);
             transaction.commit();
         } catch (Exception e) {
             // 失败回滚
             transaction.rollback();
         }
     
         session.close();
     
     }
     
     @Override
     @Test
     public void getAll() {
         Session session = Hibernate4Util.getSessionFactoryInstance().openSession();
         Transaction transaction = session.beginTransaction();
         try {
             Query query = session.createQuery("from Person");
             List<Person> list = query.list();
             for (Person person : list) {
                 System.out.println(person.getName());
             }
         } catch (Exception e) {
             // TODO: handle exception
         }
     }
     
     @Override
     public void getByID(int id) {
         Session session = Hibernate4Util.getSessionFactoryInstance().openSession();
         Person person = (Person) session.get(Person.class, id);
         System.out.println(person.getName());
     }

    }

七。测试Dao实现类方法

  1. add()
     1    小名    10    三里屯儿
  2. getAll()
     Hibernate: select person0_.id as id1_0_, person0_.name as name2_0_, person0_.age as age3_0_, person0_.address as address4_0_ from person person0_
     小名
     小名
     小名
     小名
     小名
     小名
  3. getByID(1)
     小名

八。小结

本文介绍了hibernate的基础用法,对进一步的学习打下了基础。hibernate是对JDBC的封装,使得程序员能够通过面向对象的编程思维来操作数据库。