1,简介
Hibernate是主要使用在数据库层面的开源对象关系映射框架。hibernate对于JDBC有一个非常轻量级的封装,使得我们可以随心所欲的操作数据库。
简单解释一下上一句话。对象关系映射是什么意思?对象指的就是POJO持久化对象了,此对象映射的是数据库中的数据表。那么它是一一映射吗?回答是否定的,后面会提到这个问题。再来说,非常轻量级的封装是什么意思。使用hibernate操作数据库,hibernate提供了一种类似于SQL的语言叫做HQL。除了HQL还有其他五种查询方式,参考 http://www.cnblogs.com/shiyangxt/archive/2009/01/13/1375151.html。
2,下载:
下载地址http://hibernate.org/orm/
至2015-3月最新版本为4.3.8
3,环境介绍
JDK1.7 + Mysql5.0 + hibernate4.3.8 + Eclipse luna
4,简述原理:
hibernate首先通过配置文件cfg.xml初始化数据库,创建SessionFactory,进而得到session也就是一个数据库连接。cfg文件中包括数据库驱动、URL、数据库名称以及密码等等参数,最重要的是将表或者视图的hbm文件写入cfg文件,否则是无法使用hibernate服务的。当用户操作数据库表或视图的时候,hibernate加载此表的hibernate mapping文件也就是hbm.xml文件。hbm文件主要是映射数据库表与持久化类POJO。通过hbm文件可以将实体对象与数据库表或者视图对应,从而间接的操作数据库表或者视图。
5,配置文件
cfg文件必须放在根包路径下,才会被自动加载执行。
hbm文件就是对象表之间的映射文件。在此文件中可以清晰的看到映射关系。hbm文件一般放在POJO类相同的包路径下。同样会被自动解析加载。
6,创建POJO类。
首先来捋一捋各种O。
PO:persistant object持久对象。BO:business object业务对象。VO:value object值对象、ViewObject表现层对象。DTO:Data Transfer Object数据传输对象。DAO:data access object数据访问对象。一个对象究竟是什么O要看具体环境,在不同的层、不同的应用场合,对象的身份也不一样,而且对象身份的转化也是很自然的。
举例说明:
比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO
POJO:persistant object Java object。持久化数据对象。POJO类的特点是一般只有seter、geter方法和一个无参构造一个全参构造的简单类。此类又叫做DATA类。
这里给出一个HibernateTool的工具类来加载配置文件和获得、关闭session。
public class HibernateTool {
private static SessionFactory factory;
static{ //待记录
try{
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
System.out.println("Hibernate serviceRegistry created");
factory = configuration
.buildSessionFactory(serviceRegistry);
}catch(Exception e){
throw e;
}
}
/**
* 得到一个session对象
* @return
*/
public static Session getSession(){
return factory.openSession();
}
/**
* 释放此session对象,是释放不是关闭哦
* @param session
*/
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
}