为什么使用Hibernate?
这个问题就像我们为什么使用MVC,设计模式一样,我们使用它们的 目的就是为
了方便,而它们之所以会存在就是因为它们有自己的特点。
今天就来通过认识Hibernate,从而知道我们为什么要使用它。
一、Hibernate的由来:
我们平常做开发的时候经常需要使用到JDBC连接来读写数据库,最常见的
就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又
需要转换或封装后往外传,这是一个非常烦琐的过程。
这时出现了Hibernate框架,它很好的解决了这一繁琐的问题。
二、Hibernate的概念:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常
轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵
数据库。
换句话说,Hibernate对JDBC访问数据库的代码做了封装,大大简化了数
据访问层繁琐的重复性代码。
下面我来展示一下不使用Hibernate和使用Hibernate的D层的代码:
使用Hibernate前:
public void addItem(Connection conn, Item item) {
String sql = "insert into t_items (item_no, item_name, spec, pattern, category, unit) " +
"values (?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = null;
try {
//Dao的设计通常是单纯的,不应该放入太多的逻辑
//因为Dao是我们程序的最底层,所以越通用越好
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, item.getItemNo());
pstmt.setString(2, item.getItemName());
pstmt.setString(3, item.getSpec());
pstmt.setString(4, item.getPattern());
为什么使用Hibernate
pstmt.setString(5, item.getItemCategory().getId());
pstmt.setString(6, item.getItemUnit().getId());
pstmt.executeUpdate();
} catch (SQLException e) {
throw new AppException("添加物料失败!");
} finally {
DBUtil.close(pstmt);
}
}
使用Hibernate后:
public void addItem(Session session, Item item) {
session.save(item);
}
从对比中我们可以看到使用Hibernate后代码清爽了很多。
三、Hibernate的优点
Hibernate除了上面所说的可以减少代码量还有下面的优点:
1. 提高生产力
因为是基于JDBC的封装,所以代码更加简练了,生产力自然得到了提高。
2. 使开发更加对象化
因为Hibernate是对ORM(对象/关系数据库映射)的一个很好的实现。
所以它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,
完全的面向对象思想。
3. 可移植性
Hibernate中不涉及sql语句,sql语句虽然是标准的,但是各个数据库厂商会有
不同,使用hibernate标准API,会自动转换成相应的数据库sql语句,关键是
为什么使用Hibernate
hibernate配置文件中方言的配置。
4. 支持透明持久化
Hibernate的API没有侵入性(即所编写的类不需要继承Hibernate的API),对
于实体类来说,既可以使用普通的JDBC,也可以使用Hibernate。
四、Hibernate的适用范围
凡事有利必有弊,由于我们Hibernate的特点,所以它存在着一些局限
性。
1.由于Hibernate是对ORM的实现,所以它只适合于所有的关系型数据
库。
2.由于Hibernate中不涉及sql语句,所以它对大批量数据更新及统计查
询功能会有问题。
3.对于一些Hibernate中的映射标签,因为已经封装好,所以它们的实
现也需要一些相应技术的支持。
以上对Hibernate进行了初步的介绍,相信大家对Hibernate有了一些认
识,也知道了我们使用它就是为了在适当的时候(它的适用范围内)为我们提
供一些方便。