Hibernate入门小结 返回主页
Hibernate是一款使用简便,思想先进的ORM框架。本文就Hibernate的入门使用方法进行阐述与总结。
一。建立工程(本文以hibernate4.3.11为例)
- 首先建立版本为2.5的java web工程,命名为Hibernate4part1;
- 向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&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
- PersonDao接口
public interface PersonDao {
//增加数据
public void add();
//查询所有数据
public void getAll();
//根据id查询
public void getByID(int id);
}
类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实现类方法
- add()
1 小名 10 三里屯儿
- 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_
小名
小名
小名
小名
小名
小名
- getByID(1)
小名
八。小结
本文介绍了hibernate的基础用法,对进一步的学习打下了基础。hibernate是对JDBC的封装,使得程序员能够通过面向对象的编程思维来操作数据库。