面试问hibernate和mybatis的区别和对mybatis的认识

Posted mengzixuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试问hibernate和mybatis的区别和对mybatis的认识相关的知识,希望对你有一定的参考价值。

一、对mybatis的认识

从背景上说:是一个支持普通SQL查询,存储过程和高级映射的持久层框架;是对jdbc的半封装,和hibernate一样是一个持久层框架
从特点上说:简单易学;没有依赖。灵活操做数据库;减少耦合提供dao层。提供映射 动态SQL 最强大的特性之一;可以让开发者掌控SQL功能;还可以集成 单独使用有许多的限制;
(无法跨多个session事务)和一些框架一起使用 例如(ssm)把mybatis 配置成事务 aop 通过反射
从框架的架构上说:1:加载配置(配置文件和Java代码的注解)2:SQL解析 3:SQL执行 4:结果映射
执行原理:sqlsessionfactorybuild 通过build sqlsessionfactory 工厂函数 创建sqlsession 通过 sqlsession 获得连接,
在service层通过代理对象获取dao层的接口 xml文件通过namesapce 连接 得到结果集映射 最后在服务器端获取service层接受的数据 响应到客户端

二、 简单简介


2.1 Hibernate 框架

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。

Hibernate优势

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

2.2    Mybatis框架

    Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名。是一个半自动化的持久层框架。

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

MyBatis容易掌握,而Hibernate门槛较高。
一句话:
Mybatis:小巧、方便、高效、简单、直接、半自动化

Hibernate:强大、方便、高效、复杂、间接、全自动化

三、 两者的区别

3.1 开发方面

    在项目开发过程当中,就速度而言:

        hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发;

        Mybatis 属于半自动化,sql需要手工完成,稍微繁琐;

    但是,凡事都不是绝对的,如果对于庞大复杂的系统项目来说,发杂语句较多,选择hibernate 就不是一个好方案。

3.2 sql优化方面

    Hibernate 自动生成sql,有些语句较为繁琐,会多消耗一些性能;

    Mybatis 手动编写sql,可以避免不需要的查询,提高系统性能;

3.3 对象管理比对

    Hibernate 是完整的对象-关系映射的框架,开发工程中,无需过多关注底层实现,只要去管理对象即可;

    Mybatis 需要自行管理 映射关系;

3.4 缓存方面    

相同点:

Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓 存方案,创建适配器来完全覆盖缓存行为。

不同点:

Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

三、 ==和equals


==:比较的是值是否相等
作用于基本数据类型的变量,比较的是“值”是否相等,
作用于引用类型的变量,比较的是对象的地址。
equals:注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
    没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
   对equals方法进行了重写的话,比较的是所指向的对象的内容。

以上是关于面试问hibernate和mybatis的区别和对mybatis的认识的主要内容,如果未能解决你的问题,请参考以下文章

python开发面试问题

mybatis和hibernate的区别

面试问的问题

Hibernate和MyBatis的区别

Hibernate与Mybatis的区别

hibernate和mybatis的区别