什么是Hibernate框架?
Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象!
为什么要使用Hibernate?
既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层->在编写程序中的DAO层...
首先,我们来回顾一下我们在DAO层写程序的历程吧:
- 在DAO层操作XML,将数据封装到XML文件上,读写XML文件数据实现CRUD
- 在DAO层使用原生JDBC连接数据库,实现CRUD
- 嫌弃JDBC的ConnectionStatementResultSet等对象太繁琐,使用对原生JDBC的封装组件-->DbUtils组件
我们来看看使用DbUtils之后,程序的代码是怎么样的:
public class CategoryDAOImpl implements zhongfucheng.dao.CategoryDao{
@Override
publicvoidaddCategory(Category category) {
QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
String sql = "INSERT INTO category (id, name, description) VALUES(?,?,?)";
try {
queryRunner.update(sql, new Object[]{category.getId(), category.getName(), category.getDescription()});
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public Category findCategory(String id) {
QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
String sql = "SELECT * FROM category WHERE id=?";
try {
Category category = (Category) queryRunner.query(sql, id, new BeanHandler(Category.class));
return category;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public List<Category> getAllCategory() {
QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
String sql = "SELECT * FROM category";
try {
List<Category> categories = (List<Category>) queryRunner.query(sql, new BeanListHandler(Category.class));
return categories;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
其实使用DbUtils时,DAO层中的代码编写是很有规律的。
- 当插入数据的时候,就将JavaBean对象拆分,拼装成SQL语句
- 当查询数据的时候,用SQL把数据库表中的列组合,拼装成JavaBean对象
也就是说:javaBean对象和数据表中的列存在映射关系!如果程序能够自动生成SQL语句就好了....那么Hibernate就实现了这个功能!
简单来说:我们使用Hibernate框架就不用我们写很多繁琐的SQL语句,从而简化我们的开发!
ORM概述
在介绍Hibernate的时候,说了Hibernate是一种ORM的框架。那什么是ORM呢?ORM是一种思想
- O代表的是Objcet
- R代表的是Relative
- M代表的是Mapping
ORM->对象关系映射....ORM关注是对象与数据库中的列的关系
Hibernate快速入门
学习一个框架无非就是三个步骤:
- 引入jar开发包
- 配置相关的XML文件
- 熟悉API
引入相关jar包
我们使用的是Hibernate3.6的版本
hibernate3.jar核心 + required 必须引入的(6个) + jpa 目录 + 数据库驱动包
编写对象和对象映射
编写一个User对象->User.java
public class User {
private int id;
private String username;
private String password;
private String cellphone;
//各种setter和getter
}
编写对象映射->User.hbm.xml。一般它和JavaBean对象放在同一目录下
我们是不知道该XML是怎么写的,可以搜索一下Hibernate文件夹中后缀为.hbm.xml
。看看它们是怎么写的。然后复制一份过来
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- This mapping demonstrates content-based discrimination for the table-per-hierarchy mapping strategy, using a formula discriminator.-->
<hibernate-mapping package="org.hibernate.test.array">
<class name="A" lazy="true" table="aaa">
<id name="id">
<generator class="native"/>
</id>
<array name="bs" cascade="all" fetch="join">
<key column="a_id"/>
<list-index column="idx"/>
<one-to-many class="B"/>
</array>
</class>
<class name=