zoukankan      html  css  js  c++  java
  • mybatis

    Mybatis原理

    MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。

    总结:
    mybatis的优点同样是mybatis的缺点,正因为mybatis使用简单,数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在xml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,也非常受限。
    mybatis没有hibernate那么强大,但是mybatis最大的优点就是简单小巧易于上手,方便浏览修改sql语句。

    Hibernate了解吗,Mybatis和Hibernate的区别
    Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。
    Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系。

    其次具体从几个方面说一下两者的区别:
    1.两者最大的区别:
    针对简单逻辑,Hibernate和MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。
    针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。
    2.开发难度对比
    Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂、庞大,学习周期较长。
    而Mybatis则相对简单一些,并且Mybatis主要依赖于sql的书写,让开发者感觉更熟悉。
    3.sql书写比较
    Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。不过没有自己的日志统计,所以要借助log4j来记录日志。
    Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。不过Hibernate具有自己的日志统计。
    4.数据库扩展性比较
    Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差。
    Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心。
    5.缓存机制比较
    相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
    不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
    MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
    两者比较:因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。
    而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
    6.总结:
    Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。而MyBatis的优势是MyBatis可以进行更为细致的SQL优化,可以减少查询字段,并且容易掌握。
    Hibernate的优势是DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

    Hibernate
    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC就是一种持久化机制。文件IO也是一种持久化机制。
    一、Hibernate是对JDBC进一步封装
    原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。
    二、我们再从分层的角度来看
    我们知道非常典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。
    三、Hibernate是开源的一个ORM(对象关系映射)框架。
    ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。


    从上图中,我们可以看出Hibernate六大核心接口,两个主要配置文件,以及他们直接的关系。Hibernate的所有内容都在这了。那我们从上到下简单的认识一下,每个接口进行一句话总结。
    1、Configuration接口:负责配置并启动Hibernate, 实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了
    2、SessionFactory接口:负责初始化Hibernate
    3、Session接口:负责持久化对象的CRUD操作
    4、Transaction接口:负责事务
    5、Query接口和Criteria接口:负责执行各种数据库查询

    优点:
    1、更加对象化以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加对象化。
    2、移植性因为Hibernate做了持久层的封装,你就不知道数据库,你写的所有的代码都具有可复用性。
    3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。
    4、Hibernate代码测试方便。
    5、提高效率,提高生产力。
    缺点:
    1、使用数据库特性的语句,将很难调优
    2、对大批量数据更新存在问题
    3、系统中存在大量的攻击查询功能

  • 相关阅读:
    jQuery Eazyui的学习和使用(一)
    PHP 红包功能代码
    PHPExcel 使用学习
    AngularJS 学习笔记
    sublime 快速生成html基础代码
    mysql 重置主键
    php 常用文件操作
    Android隐藏状态栏实现沉浸式体验
    MVC
    安卓Design包之NavigationView结合DrawerLayout,toolbar的使用,FloatingActionButton
  • 原文地址:https://www.cnblogs.com/novalist/p/6400104.html
Copyright © 2011-2022 走看看