zoukankan      html  css  js  c++  java
  • 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、不适合批量操作
     
     
     
     
     
     
  • 相关阅读:
    [vue]vue路由篇vue-router
    [vue]spa单页开发及vue-router基础
    [css]table的拆分
    [sh]md5sum接变量,find排除,sh判断文件存在
    [vue]通过watch实现数据双向绑定
    [django]form不清空问题解决
    [vue]实现父子组件数据双向绑定
    springboot2.0 如何异步操作,@Async失效,无法进入异步
    kafka搭建笔记
    Springboot2.x+shiro+redis(Lettuce)整合填坑
  • 原文地址:https://www.cnblogs.com/javadan/p/4492372.html
Copyright © 2011-2022 走看看