博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(三)mybatis之对Hibernate初了解
阅读量:6758 次
发布时间:2019-06-26

本文共 2832 字,大约阅读时间需要 9 分钟。

前言:为什么会写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文件,它描述的是POJO和数据库表的映射关系。Hibernate通过配置文件(或注解)就可以把数据库的数据直接映射到POJO上,我们可以通过操作POJO去操作数据库记录。

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

org.hibernate.dialect.MySQLDialect
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/mybatis
root

         这个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篇( )的代码效果是一样的。

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

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

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做不到。

 

转载于:https://www.cnblogs.com/NYfor2018/p/9092810.html

你可能感兴趣的文章
关于如何去理解和取证生成树(STP)的BackboneFast机制对劣质BPDU的处理
查看>>
LoadRunner 如何将英文的字符串转换成UTF-8格式的字符串?
查看>>
Oracle系列:安装Oracle RAC数据库(二)
查看>>
nginx 另一WAF方式
查看>>
LinkedTransferQueue学习导引
查看>>
对restore database preview显示结果的思考
查看>>
Windows Server 2008 R2入门之NTFS权限
查看>>
精品软件 推荐 酷我音乐 一个可以下载320k 音质的音乐播放软件
查看>>
heartbeat+DRBD+mysql高可用集群实战
查看>>
The listener supports no services The command completed successfully
查看>>
centos6.5系统编译安装mariadb以及实现主从复制
查看>>
C#获取系统版本信息
查看>>
linux磁盘阵列实战
查看>>
Android应用程序进程启动过程的源代码分析(3)
查看>>
【畅谈百度轻应用】云时代·轻应用·大舞台
查看>>
Forefront_TMG_2010-TMG发布Web服务器
查看>>
MySQL字符集的一个坑
查看>>
区块链将成支付宝国际化的有力武器!
查看>>
理论上分析IP报文的结构各字段的意义
查看>>
OCS 2007 R2搭建准备虚机及快照
查看>>