1. Hibernate的定义:
Hibernate是一个基于JDBC的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO层编码工作。Hibernate 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。
2. Hibernate的开发步骤:
1.创建持久化类
2.创建对象-关系映射(ROM)文件
3.创建Hibernate配置文件
4.通过Hibernate API编写访问数据库的代码
1.创建持久化类:
/**
* 实体
*/
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "[User: id=" + id + ", name=" + name + "]";
}
}
2. 创建对象-关系映射文件*.hbm.xml:
(Hibernate之所以能够智能地判断实体类和数据表之间的对象关系,就是因为有映射文件)
3. 创建Hibernate配置文件hibernate.cfg.xml:(在src目录下)
org.hibernate.dialect.MySQLDialect
jdbc:mysql:///hibernate_20160926
com.mysql.jdbc.Driver
root
yezi
true
4. 通过Hibernate API编写访问数据库的代码:
编程步骤:
public class App {
private static SessionFactory sessionFactory;
static {
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
sessionFactory = cfg.buildSessionFactory(); // 根据配置生成Session工厂
}
@Test
public void testSave() {
User user = new User();
user.setName("张三");
// 保存
Session session = sessionFactory.openSession(); // 打开一个新的Session
Transaction tx = session.beginTransaction(); // 开启事务
session.save(user);
tx.commit(); // 提交事务
session.close(); // 关闭Session,释放资源(不一定是真正的关闭)
}
@Test
public void testGet() {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, 1); // 获取?
System.out.println(user);
tx.commit();
session.close();
}
}
注意:Session的管理,Spring会帮助关闭的
这样一看我们的方法写的代码也是挺多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。其实真正的开发中,我们会把这些对象,事务的操作交给框架来管理,我们需要做的就是持久化操作的那些代码,是非常少的。
5. Hibernate的优点、缺点:
优点:
缺点:如果对大量的数据进行频繁的操作,性能效率低,不如直接使用JDBC。
6. ORM(object Relation Mapping)对象关系数据库的映射:
这是Hibernate框架的重点,也就是说我们程序中的实体(bean,这里也叫POJO)和数据库中的表进行映射。Java类型和sql类型映射,面向对象设计和关系型数据库设计的映射,从而我们只需要把更多的精力放在业务中。
7. MyBatis和Hibernate的区别:
1、Hibernate 是一个标准的ORM框架(对象关系映射框架),不需要程序写sql,sql语句自动生成,对sql语句进行优化、修改 比较困难。全自动的、完全面向对象的持久层框架。
2、MyBatis专注于sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。是一个不完全的ORM框架,虽然程序员自 己写sql,MyBatis也可以实现映射(输入映射,输出映射)半自动化的持久层框架。
3、Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护sql和结果映射。
4、Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
5、Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同sql。
6、Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
7、MyBatis可以进行更为细致的SQL优化,可以减少查询字段。