mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。封装了 几乎所有的JDBC代码和参数的手工设置 ,以及结果集的检索:

封装了:1,获取连接,执行sql,释放连接。

2,sql的参数设置,属性自动传递参数(例如emp有name和age属性,sql语句写成“insert into emp (name,age) values(#{name},#{age})”就可以了,不用像jdbc                    一样还要用preparedstatement对象设置参数ps.setString(1,“xiaoming”)

3,封装了记录映射成实体对象的的过程,(jdbc要自己写rowmapper)

hibernate也是当前流行的orm工具,访问数据库的框架,对数据结构提供了较完整的封装。

封装了:1,获取连接,sql编写,执行sql,释放连接。

2,sql参数设置,

3,记录封装成实体对象等一系列过程。

对比上面两个,一目了然,hibernate相比mabatis居然连sql编写也封装了。这点本质的不同,是mybatis与hibernate的最大区别,很多网上写的区别,看起来很乱,很头大其实大多都是从这点引发出来的。

接下来我们一点一点的说。

区别一:扩展性方面。使用mybatis要自己根据相应的数据库写不同的sql实现,例如用MySQL数据库写了一个sql的分页语句,如果换成了oracle数据库就用不了了。然而如果是hibernate的hql语句则是对实体类(User)和属性的操作,也拿分页查询来说,string hql=“from User”; Query q1=session.creatQuery(hql); q1.setFirstResult(m);q1.setMaxResult(n);   List<User> list=q1.list();会根据具体的数据库生成各自相应不同的查询的语句,所以移植性很好。

区别二:sql效率,优化方面。Hibernate的查询,更新都是对所有字段的操作例如(根据id查询,sessin.get(User.class,"id"),还有要session.update(对象)时,按照对象的id做条件,更新其他字段信息。如果想要更新部分字段,其他字段保持不变,则对象的其他字段对应的属性也要有原值),这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。maybatis的优化,就是对sql语句的优化,MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。hibernate的优化(可以记一下):

  1. 制定合理的缓存策略;
  2. 尽量使用延迟加载特性;
  3. 采用合理的Session管理机制;
  4. 使用批量抓取,设定合理的批处理参数(batch_size);
  5. 进行合理的O/R映射设计

还有一点被面试问到过,就是sql和hql形式上的区别。个人认为属于第一点区别:

sql: select 字段名...from table_name  where  字段名...   sql是直接对数据库表的操作

hql:select 属性名...from 实体类 where 属性 条件 ...group by 属性order by属性。hql是对与表有映射关系的实体类的操作,底层会再自动生成相应的sql。

以上点就是最大的区别了。当然网上还有说对象管理和抓取策略,缓存机制什么的,太高级了这里不再讨论了。附上连接:

http://blog.csdn.net/firejuly/article/details/819022

面试之mybatis和hibernate的区别的更多相关文章

  1. mybatis与hibernate的区别持久层对比【面试题】

    Mybatis技术特点: 好处: 通过直接编写SQL语句,可以直接对SQL进行性能的优化: 学习门槛低,学习成本低.只要有SQL基础,就可以学习mybatis,而且很容易上手: 由于直接编写SQL语句 ...

  2. mybatis和hibernate的区别

    1. hibernate是全自动,而mybatis是半自动 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql.而mybat ...

  3. mybatis_08 mybatis与hibernate的区别

    这个问题常常被面试官当做面试题 mybatis与hibernate喜忧参半,各有特点 Mybatis技术特点: 好处: 1.  通过直接编写SQL语句,可以直接对SQL进行性能的优化: 2.  学习门 ...

  4. Mybatis与Hibernate的区别

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

  5. mybatis 和hibernate的区别

    mybaits 是不完全的orm(对象关系映射(Object Relational Mapping)框架,需要自己书写sql语句 mybatis学习难度必hibernate低适合关系型模型要求不高的软 ...

  6. Mybatis和Hibernate本质区别和应用场景

    Hibernate:是一个标准ORM(对象关系映射)框架.入门门槛较高,不需要程序员写sql语句,sql语句自动生成,对sql语句优化.修改比较困难 应用场景:适用于需求变化不多的中小型项目,比如后台 ...

  7. MyBatis与Hibernate的区别?

    1.MyBatis学习成本低,Hibernate学习成本高: 2.MyBatis程序员编写SQL,Hibernate自动生成SQL:前者灵活及可优化高,后者不灵活及可优化低: 3.MyBatis适合需 ...

  8. mybatis和hibernate的区别【转】

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

  9. mybatis 和 hibernate 本质区别和应用场景

    Hibernate: 是一个标准 ORM 框架(对象关系映射).入门门槛较高,不需要程序员写 SQL,SQL语句自动生成. 对 SQL 语句进行优化.修改比较困难. 应用场景: 适用于需求变化不多的中 ...

随机推荐

  1. Codeforces 1C(外接圆与正多边形)

    要点 各点肯定都在外接圆上,边越多越接近圆面积,所以要最小面积应当取可能的最少边数. 给三角形求外接圆半径公式:\(R=\frac{abc}{4S}\). 三个角度对应的圆心角取gcd即是要求的正多边 ...

  2. 洛谷2414(构建ac自动机fail树dfs序后遍历Trie树维护bit及询问答案)

    要点 这是一道蔡队题,看我标题行事 任意询问y串上有多少个x串,暴力找每个节点是不是结尾肯定是炸的,考虑本质:如果某节点是x的结尾,根据ac自动机的性质,x一定是此(子)串后缀.又有每个Trie节点的 ...

  3. redis--StringRedisTemplate和RedisTemplate区别

    StringRedisTemplate: 1).只能存储string类型的值,因此不能存储如对象 2).序列化为string,如: RedisTemplate: 1).可以存储任意类型,含对象. 2) ...

  4. ruby 数组 Hash相互转换

    由[索引, 值, ...] 型的数组变为哈希表 ary = [1,"a", 2,"b", 3,"c"] p Hash[*ary] # =&g ...

  5. 解释器模式和php实现

    解释器模式: 给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 角色: 环境角色:定义解释规则的全局信息. 抽象解释器::定义了部分解释具体实现,封装了 ...

  6. Redhat/CentOS 软件安装

    概述 软件包简介 rpm 包安装 yum 在线安装 源码包管理 软件包分类 源码包 二进制包(rpm包.系统默认包) rpm包安装 rpm包的依赖性 树形依赖: a -> b -> c 环 ...

  7. 就来推荐一本2018年研究的Web书《移动Web前端高效开发实战》

    一线互联网公司Web前端团队实战经验总结,涵盖移动Web前端开发各个关键技术环节,包括移动开发核心技术.常用布局方案.MV*类新时代框架.预编译技术.性能优化.开发调试.混合式应用.单元测试.工程化等

  8. 【Unity3D】实现太阳系

    实践要求:写一个程序,实现一个完整的太阳系,其他星球围绕太阳的转速必须不一样,并且不再一个法平面内. 法平面是指过空间曲线的切点,且与切线垂直的平面.要求不在一个法平面内,则在保证所有行星以及太阳在一 ...

  9. SQL数据库基础三

  10. 在jquery事件中修改Angular的model

    HTML代码如下 <!DOCTYPE html> <html ng-app="qm"> <body> <input type=" ...