前言:为什么会写Hibernate呢?因为HIbernate跟Mybatis一样,是以ORM模型为核心思想的,但是这两者有相似的地方也有差异的地方。通过这两种框架的比对,可以对mybatis有着更深的了解。


 

Hibernate

         在Hibernate之前是EJB(JavaEE服务器端组件模型),但是由于EJB配置复杂,且适用范围比较小,所以很快就被淘汰了。于是Hibernate一问世就成了Java世界首选的ORM模型,它是建立在POJO和数据库表模型的直接映射关系上的。

Hibernate是建立在若干POJO通过xml映射文件(或注解)提供的规则映射到数据库表上的。而且Hibernate对JDBC的封装程度还是比较高的,我们已经不需要编写SQL语言,只要使用HQL(Hibernate Query Language)语言就可以了。

① 首先我们要先提供hbm.xml文件,制定从POJO到数据库表的映射规则。

<?xml version="1.0?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="com.entity.User" table="user_info">

    <!-- class标签中,name是POJO的所在坐标位置,table是POJO在数据库中对应的表的表明 -->

    <id name="id" type="int">

        <column name="id"/>

        <generator class="assigned"/>

        <!-- generator这里的class的值为assigned,表示主键由外部程序负责生成,在save()之前指定一个 -->

    </id>

    <property name="userName" type="string">

        <column name="userName" length="60"/>

    </property>

    </class>

</hibernate-mapping>

这是一个简单的XML文件,它描述的是POJO和数据库表的映射关系。Hibernate通过配置文件(或注解)就可以把数据库的数据直接映射到POJO上,我们可以通过操作POJO去操作数据库记录。

②  再编写Hibernate连接数据库的配置文件cfg.xml。

<?xml version="1.0 encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mybatis</property>

        <property name="hibernate.connection.username">root</property>

        <property name="hibernate.connection.password"></property>

        <mapping resource="com/entity/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

这个xml文件描述了数据库连接信息,在配置信息的时候也相对于JDBC要方便。

  ③ 然后建立Hibernate的工厂对象(SessionFactory),用它来做全局对象,产生Session接口,就可以操作数据库了。

public class HibernateUtil{

    private static final SessionFactory sessionFactory;

    static{

        try{

            Configuration cfg = new Configuration().configure("hibernate.cfg.xml");

            //引入数据库配置文件

            sessionFactory = cfg.buildSessionFactory();

            //将数据库的配置信息应用到sessionFactory,sessionFactory用于生成session

        }catch(Throwable ex){

            System.err.println("Initial SessionFactory creation failed."+ex);

            throw new ExceptionInInitializerError(ex);
        }
    }
    public static SessionFactory getSessionFactory(){

        return sessionFactory;

    }

}

上面的操作就是为了产生Hibernate的SessionFactory。它作为全局,可以到处引用。

    ④ 最后就是引用上面的操作来进行session的应用。

public class HibernateExample{

    public static void main(String[] args){

        Session session = null;

        try{

            session = HibernateUtil.getSessionFactory().openSession();

            User user = (User)session.get(User.class,1);

            System.err.println("userName =>"+user.getUserName());

        }finally{

            if(session!=null){

                session.close();

            }

        }

    }

}

这里的代码的效果跟JDBC篇(https://www.cnblogs.com/NYfor2018/p/9088254.html )的代码效果是一样的。

而Hibernate的实现比用JDBC的方法实现的好处在于:

1、  消除了代码的映射规则,它全部被分离到了XML文件或者注解里面去配置。(Hibernate的注解方式的应用可以参考这篇文章:http://www.cnblogs.com/NYfor2018/p/9029933.html ).

2、  无需再管理数据库连接,它也配分离到XML文件配置里面了。

3、  一个会话中,不要操作多个对象,只要操作Session对象即可。

4、  关闭资源只用关闭一个Session即可。

5、  Hibernate还提供级联、缓存、映射、一对多等功能。

6、  Hibernate是全表映射,可以通过HQL去操作POJO进而操作数据库的数据。

但是,如果表名进行了更改,要动态加载映射关系,Hibernate需要破坏底层封装才能做到。而且我们是没有办法通过xml文件去完成映射规则的。再者,Hibernate屏蔽了SQL,那就意味着只能全表映射,很不便于在较多数据的数据库表中对数据进行操作。

稍微总结一下HIbernate的缺点

1、  全表映射带来的不便,像是更新时需要发送所有的字段。

2、  无法根据不同的条件组装不同的SQL。

3、  对多表关联和复杂SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据组装为POJO。

4、  不能有效支持存储过程。

5、  虽然有HQL,但是性能较差。大型互联网系统往往需要优化SQL,而Hibernate做不到。

(三)mybatis之对Hibernate初了解的更多相关文章

  1. Hibernate初认识以及HelloWorld

    一.Hibernate初认识 1. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 2.对 ...

  2. hibernate初体验

    简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...

  3. hibernate初使用

    准备工作,安装及配置Hibernate http://zhoualine.iteye.com/blog/1190141 在产生数据库表映射 Java 对象时,我增加了数据库中的两张表分别为Chatlo ...

  4. 一 Mybatis概述&与Hibernate的区别&CRUD

    Mybatis是类似Hibernate的ORM持久层框架 为什么学习Mybatis? 是目前国内主流的持久层框架,面向sql(相较于Hibernate,Mybatis一定要用sql) Hibernat ...

  5. 【SSH三个框架】Hibernate第七基金会:不少下属业务

    相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系,但也有许多关系.但,只知道它是不够的,Hibernate它是一种面向对象 ...

  6. 【SSH三个框架】Hibernate第十篇基础:inverse属性具体解释

    inverse后经常用于双向1-N在相关性.它也可以在使用N-N该协会,这里,例如用双1-N联想 或两个与各部门及工作人员,两javabean没有写. 首先,我们的员工看映射文件: <?xml ...

  7. 【SSH三个框架】Hibernate第八部分基础:经营-many关系

    在Hibernate在-many关系.它通常不使用.由于当数据库查询复杂度太高时. 我们在这里做的是学生和教师,学生可以有多个老师,教师可以有多个学生. watermark/2/text/aHR0cD ...

  8. 20155315庄艺霖第三次作业之Linux初体验

    Linux初体验 安装Linux三两事 老师的作业要求基于VirtualBox安装Linux系统,我一开始下载了VB但是电脑运行不了,后来看网上的教程下载了VMware,才算开始了我的Linux之旅. ...

  9. mybatis入门(三):mybatis的基础特性

    mybatis的知识点: 1.mybatis和hibernate本质区别和应用场景 hibernate:是一个标准的ORM框架(Ojbect relation mapper对象关系映射).入门门槛较高 ...

随机推荐

  1. Eclipse中导入Hadoop源代码工程

    以hadoop 2.7.3为例, jdk1.7.0_80 , Eclipse Mars(4.5), Apache Maven 3.0.5   mvn时需要使用root权限,即县切换到root用户,用命 ...

  2. java8--List转为Map、分组、过滤、求和等操作

    利用java8新特性,可以用简洁高效的代码来实现一些数据处理~ 定义1个Apple对象: public class Apple { private Integer id; private String ...

  3. IDL(Interactive Data Language——交互式数据语言)

    Interactive Data Language——交互式数据语言 目前,图像处理常用的ENVI就是用IDL开发的经典软件 广泛支持的平台: Microsoft Windows Open VMS S ...

  4. 聊聊IT行业加班的问题

    IT行业(包括互联网行业)是快速发展的行业,有时候一家公司同时可能要开发多个项目,并发进行,在公司开发人员相对固定的情况下,要想在指定的时间内完成项目谈何容易. 项目多.任务重.需求的不明确.技术难关 ...

  5. 文档通信(跨域-不跨域)、时时通信(websocket)、离线存储(applicationCache)、开启多线程(web worker)

    一.文档间的通信 postMessage对象 //不跨域 1.iframe:obj.contentWindow [iframe中的window对象] iframe拿到父级页面的window: pare ...

  6. bzoj 2395: [Balkan 2011]Timeismoney【计算几何+最小生成树】

    妙啊,是一个逼近(?)的做法 把两个值最为平面上的点坐标,然后答案也是一个点. 首先求出可能是答案的点xy分别是按照c和t排序做最小生成树的答案,然后考虑比这两个点的答案小的答案,一定在xy连线靠近原 ...

  7. Codevs 1570 去看电影

    1570 去看电影  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 农夫约翰带着他的一些奶牛去看 ...

  8. [Xcode 实际操作]一、博主领进门-(7)使用不同类型的iOS模拟器

    目录:[Swift]Xcode实际操作 本文将演示使用不同类型的iOS模拟器. 点击[运行]按钮,打开模拟器,并预览当前的项目. 当向苹果商店提交应用时,也需要同时提交应用的截图. 对当前的应用的界面 ...

  9. 爬虫—使用Requests

    一,安装 pip install requests 二,基本用法 1.简单示例 import requests res = requests.get('https://www.baidu.com') ...

  10. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?

    最新的vue里dev-server.js被替换成了webpack-dev-conf.js 在模拟后台数据的时候直接在webpack-dev-conf.js文件中修改 第一步,在const portfi ...