您的位置:首页 > 其它

hibernate简介

2015-05-10 16:04 148 查看
提到hibernate,首先的说说ORM框架技术(Object、Relation、Mapping),它的主要问题就是对象-关系的映射,怎么说呢?现在用的数据库大多数都是关系数据库,而关系数据库重在于表与表之间的关系连接。术语就为:一个持久化类和一个表对应,类的每个实例对应表的一条记录。其他就不说了,回到hibernate。ORM框架类型有很多,hibernate就是其中的一种,还有EJB框架(Enterprise javaBean)、iBATIS框架、TopLink框架等。
发展历史就不说了,先了解它的主要功能,就是连接应用程序和数据库的中间件,在应用程序中通过创建持久化类来使用Hibernate(这样是不用关心用的什么数据库),实现应用程序的业务逻辑与数据库之间的解耦。所谓框架,就是实现用框架实现对数据库的操作,而不是直接访问或操作。这样有利于安全、有利于开发。
主要文件:2个,自动配置。
1、hibernate.cfg.xml,配置数据库的连接信息。
2、XML映射文件,描述持久化类和数据库表、数据列之间的对应关系。
包作用:

net.sf.hibernate.* 该包的类基本上都是接口类和异常类
net.sf.hibernate.cache.* JCS的实现类
net.sf.hibernate.cfg.* 配置文件读取类
net.sf.hibernate.collection.* Hibernate集合接口实现类,例如List,Set,Bag等等,Hibernate之所以要自行编写集合接口实现类是为了支持lazy loading
net.sf.hibernate.connection.* 几个数据库连接池的Provider
net.sf.hibernate.dialect.* 支持多种数据库特性,每个Dialect实现类代表一种数据库,描述了该数据库支持的数据类型和其它特点,例如是否有AutoIncrement,是否有Sequence,是否有分页sql等等
net.sf.hibernate. eg.* Hibernate文档中用到的例子
net.sf.hibernate.engine.* 这个包的类作用比较散
net.sf.hibernate.expression.* HQL支持的表达式
net.sf.hibernate.hq.* HQL实现
net.sf.hibernate. id.* ID生成器
net.sf.hibernate.impl.* 最核心的包,一些重要接口的实现类,如Session,SessionFactory,Query等
net.sf.hibernate.jca.* JCA支持,把Session包装为支持JCA的接口实现类
net.sf.hibernate.jmx.* JMX是用来编写App Server的管理程序的,大概是JMX部分接口的实现,使得App Server可以通过JMX接口管理Hibernate
net.sf.hibernate.loader.* 也是很核心的包,主要是生成sql语句
net.sf.hibernate.lob.* Blob和Clob支持
net.sf.hibernate.mapping.* hbm文件的属性实现
net.sf.hibernate.metadata.* PO的Meta实现
net.sf.hibernate.odmg.* ODMG是一个ORM标准,这个包是ODMG标准的实现类
net.sf.hibernate.persister.* 核心包,实现持久对象和表之间的映射
net.sf.hibernate.proxy.* Proxy和Lazy Loading支持
net.sf.hibernate. ps.* 该包是PreparedStatment Cache
net.sf.hibernate.sql.* 生成JDBC sql语句的包
net.sf.hibernate.test.* 测试类,你可以用junit来测试Hibernate
net.sf.hibernate.tool.hbm2ddl.* 用hbm配置文件生成DDL
net.sf.hibernate.transaction.* Hibernate Transaction实现类
net.sf.hibernate.type.* Hibernate中定义的持久对象的属性的数据类型
net.sf.hibernate.util.* 一些工具类,作用比较散
net.sf.hibernate.xml.* XML数据绑定

接口:Hibernate有五大核心接口,分别是:Session、 Transaction、 Query、 SessionFactory 、Configuration 。
Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。
·SessionFactory 接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需 要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据 库时,可以为每个数据库指定一个SessionFactory。
·Configuration接口:Configuration接口负责配置并启 动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文 档位置、读取配置,然后创建SessionFactory对象。
·Transaction接口:Transaction接口负责事务相关的操作。它是可选的,可发人员也可以设计编写自己的底层事务处理代码。
·Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
工作原理:

1、通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2、由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取解析映射信息。
3、通过config.buildSessionFactory();//得到sessionFactory。
4、sessionFactory.openSession();//得到session。
5、session.beginTransaction();//开启事务。
6、persistent operate;
7、session.getTransaction().commit();//提交事务
8、关闭session;
9、关闭sessionFactory;

hibernate优点缺点:
优点:1、程序更加面向对象;
2、提高了生产率;

3、方便移植(修改配置文件);

4、无侵入性。

缺点:

1、效率比JDBC略差;

2、不适合批量操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: