数据库连接创建、释放频繁造成系统的资源浪费从而影响系统性能,可以使用数据库连接池解决此问题,之前的java应用程序sql语句也是写在java代码中造成系统可维护性差,实际应用的sql变化较大,sql变动需要改变代码;向sql语句中传入参数麻烦,因为sql语句的where条件不一定,占位符需要和参数一一对应,否则会造成错误,对查询的结果集解析较为麻烦,sql变化导致解析代码发生变化,且解析前需要遍历,致力于将数据库记录封装成POJO对象,Hibernate和Mybatis是常用的两款ORM框架

一、Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了较深层次的封装,建立了对象与数据表的映射。是一个全自动化的、完全面向对象的持久层框架,对数据库提供了较为完整的封装

二、Mybatis

Mybatis是一个开源关系映射框架,原名ibatis,2010年由谷歌接管以后更名。是一个半自动化的持久层框架,主要着力与POJO与SQL之间的映射关系

三、区别

1.开发速度

Hibernate的开发难度要比Mybatis大,主要是因为他对JDBC比较深的封装,比较复杂、庞大、开发周期比较长,但是对于关系模型高的软件(例如需求固定的定制化软件)如果用gHibernate可以节省很多代码,提高效率。

Mybatis要比Hibernate更容易上手,主要依赖与原生态的sql书写,让开发者感到更熟悉,上手速度快,这也是为什么Mybatis更加流行的原因,。

2.SQL

Hibernate的sql语句被封装,可以直接使用,加快系统开发。但是在一些自动生成的sql语句有些较为繁琐,会消耗一些性能。

Mybatis的sql语句需要手工完成,稍微繁琐,属于半自动化,可以避免不必要的查询字段,提高系统性能。这也是为什么Mybatis较Hibernate更为灵活的原因,Mybatis可以严格控制sql执行性能,灵活度高

3.数据库扩展性

Hibernate通过强大的映射结构和HQL语言,大大降低了数据库(Oracle、MySQL等)的耦合性,数据库移植性好

Mybatis由于SQL语句多为依赖数据库写的,所以扩展性、数据库移植性差,需要根据不同的数据库编写不同的SQL语句。

4.缓存机制

Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。

Hibernate具有三级缓存,以及缓存是Session缓存,是默认开启的,以及缓存与Session的生命周期相关;二级缓存是SessionFactory级的缓存,可以分为内置缓存和外置缓,其中的内置缓存存放了一些关于SessionFactory对象的一些集合属性包含的数据,包括映射元数据及预定的SQL语句等;三级缓存可以结合业界流行的缓存技术:如Redis、ecache等

Mybatis的一级缓存是SqlSession级别的缓存;二级是mapper级别的缓存,多个SqlSession共享,而他也是默认开启以及缓存,但是总体来说Mybatis的缓存机制不佳,这也很大程度的限制了Mybatis的推广

5.对象管理

Hibernate具有完整的对象/关系映射解决方案,对象管理功能也比较完善,采用了更自然的面向对象的视角来持久化JAVA应用中的数据,开发者无需关心SQL的生成与结果映射,可以更关注与业务流程

Mybatis仅有基本的字段映射,对象数据以及对象实际关系任然需要手写sql来实现和管理

6.日志

Hibernate拥有完整的日志系统,非常健全,设计 sql记录、关系异常、优化警告、缓存提示、脏数据警告等

Mybatis除了基本记录功能以外,功能薄弱很多,可以通过其他日志系统如Log4j来进行日志记录

参考:http://baijiahao.baidu.com/s?id=1597148284865632440&wfr=spider&for=pc

http://m.680.com/gonglue/info-121231.html

Hibernate与Mybatis的简单区别的更多相关文章

  1. Hibernate与Mybatis的概念区别

    首先简单介绍下两者的概念: Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装. Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力 ...

  2. hibernate和mybatis思想,区别,优缺点

    Hibernate 简介 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行.程序员往往只 ...

  3. 具体问题:3、hibernate跟Mybatis/ ibatis 的区别,为什么选择?

    第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀 ...

  4. hibernate跟Mybatis/ ibatis 的区别,为什么选择?(转)

    第一章 Hibernate与MyBatisHibernate 是当前最流行的O/R mapping框架,它出身于sf.NET,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R ...

  5. 如何回答面试中问到的Hibernate和MyBatis的区别

    这边主要是写给那些准备去面试的(没什么经验的)应聘者看的,为了在面试中更好的回答这个问题,我做一个简单的梳理和总结. 作为一名职场新人,经历过多次的面试,由于在简历中提及了Hibernate和MyBa ...

  6. 【JAVA框架】Hibernate 与Mybatis 区别

    Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介     1.1    Hibernate 框架          Hibernate是一个开放源代码的对象关 ...

  7. Hibernate与MyBatis区别

    Hibernate是当前主流的ORM框架,对数据库结构提供了较为完整的封装. MyBatis同样也是非常流行的ORM框架,主要在于pojo与SQL之间的映射关系. 区别: 1.两者最大的区别 针对简单 ...

  8. jdbc,mybatis,hibernate各自有优缺点以及区别

    JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动和数据库信息 2,操作Connection,打开Statement对象 3,通过State ...

  9. 框架和事务 非常 有用 hibernate和mybatis区别

    1****第一章 Hibernate与MyBatis 章 开发对比 开发学习 Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用 ...

随机推荐

  1. PHP- 搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5输出 ...

  2. java--CharAt,StartWith

    public class CharAtStartWithDemo { public static void main(String[] args){ //jdk8 testCharAt();//1 t ...

  3. typedef 复杂函数指针

    下面是三个变量的声明,我想使用typedef分别给它们定义一个别名,请问该如何做? >1:int *(*a[5])(int, char*); >2:void (*b[10]) (void ...

  4. 密码加密与微服务鉴权JWT

    博客学习目标 1.用户注册时候,对数据库中用户的密码进行加密存储(使用 SpringSecurity). 2.使用 JWT 鉴权认证. 一.BCrypt 密码加密 1.常见的加密方式 任何应用考虑到安 ...

  5. Java:新建数组

    Array Initialization int[] a; = int a[]; int[] a = new int[100]; a[]的值会被初始化为0 `int[] smallPrimes = { ...

  6. Vue.js(六)

    路由(用 Vue.js + Vue Router 创建单页应用) <script src="https://unpkg.com/vue-router/dist/vue-router.j ...

  7. vue基础八

    表单控件绑定 1.基础用法 你可以用 v-model 指令在表单控件元素上创建双向数据绑定.尽管有些神奇,但 v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端 ...

  8. Springboot项目静态资源配置

    springboot项目的静态资源配置网上有好多,说的也很详细 我今天出错是自定义了一个filter,在shiro里配置的/**,自定义filter 所以一直报302

  9. python locust-事件顺序

    from locust import HttpLocust,TaskSet,task ''' 点击STOP,会停止测试,并调用所有当前执行的TaskSet的on_stop,但不会调用teardown函 ...

  10. leetcode上一些常见的链表问题

    92-按规定区间反转链表 思路:可以考虑成一种把前后数字的结点断开重新组合的问题 /** * Definition for singly-linked list. * struct ListNode ...