hibernate简介

提到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、不适合批量操作
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/javadan/p/4492372.html