面试之mybatis和hibernate的区别

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

时间: 2024-10-05 23:50:08

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

MyBatis和Hibernate的区别

MyIbatis和Hibernate的区别 1.MyBatis 真正实现了java代码和sql的分离 2.Hibernate 是全自动的,MyBatis是半自动的 Hibernate实现了部分自动生成SQL 3.SQL优化上 MyBatis 强于 Hibernate 1---MyBatis优化维护方便 SQL全存在于XML中 不需要修改源代码2---开发效率上 Hibernate略强于mybatiss 3---从性能上说 因为Mybatis全都是自己手写的SQL 因此性能相对较高 反之 Hibe

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

Mybatis技术特点: 好处: 通过直接编写SQL语句,可以直接对SQL进行性能的优化: 学习门槛低,学习成本低.只要有SQL基础,就可以学习mybatis,而且很容易上手: 由于直接编写SQL语句,所以灵活多变,代码维护性更好. 缺点: 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好. Mysql:limit Oracle:rownum 需要编写结果映射. Hibernate技术特点: 好处: 标准的orm框架,程序员不需要编写SQL语句. 具有良好的数据库无关性,

mybatis与hibernate的区别

本文转载自:http://blog.csdn.net/wangpeng047/article/details/17038659 以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,而mybatis是半自动. hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql

mybatis与hibernate区别

Hibernate:hibernate是一个标准的ORM框架,不需要写sql语句,维护关系比较复杂,sql语句自动生成,对sql语句优化,修改比较困难. Hibernate的优缺点: 优点:面向对象开发,不需要自己写sql语句.如果进行数据库迁移不需要修改sql语句,只需要修改一下方言. 缺点:hibernate维护数据表关系比较复杂.完全是有hibernate来管理数据表的关系,对于我们来说完全是透明的,不易维护. Hibernate自动生成sql语句,生成sql语句比较复杂,比较难挑错. H

【持久化框架】Mybatis与Hibernate的详细对比

前言 Mybatis与Hibernate对比 简介 开发速度 数据库移植性 缓存机制对比 两者对比总结 一句话总结 前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简介与原理 [持久化框架]SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 Hibernate [SSH进阶之路]Hibernate基本原理(一)

Java面试之MyBatis

125. MyBatis 中 #{}和 ${}的区别是什么? \#{}是预编译处理,${}是字符替换. 在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全. 126. MyBatis 有几种分页方式? 分页方式:逻辑分页和物理分页. 逻辑分页: 使用 MyBatis 自带的 RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索. 物理

Mybatis和Hibernate面试问题及答案

1.@Qualifier 注解 答:当有多个相同类型的bean却只有一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的bean.   2.什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂的过程.程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高. (2)MyBat

Mybatis和Hibernate框架的区别

Mybatis和Hibernate框架的区别1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射. 是一个全自动的.完全面向对象的持久层框架. 1.2 Mybatis框架 Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名.是一个半自动化的持久层框架.2 两者区别 2.1 开发方面 在项目开发过程当中,就速度而言: hibernate开发中,s

Mybaitis和Hibernate的区别

身为一线的程序员,经常需要用到持久化框架,比如说是Mybatis和Hibernate.而且面试的的时候,经常被问到这两个框架的区别.此时你可能会说出一大堆什么一个是ORM框架,另一个是半ORM框架,在扯上一些敏捷开发,基本上是圆满了.但是,个人认为最重要的一点是:SQL本事是结构化的查询语言,有很强的可构造性,换句话说是SQL语句很灵活.如果是用hibernate的面向对象开发,程序员就得在面向对象和面向结构的两种思想之间切换,无非是增加了时间成本.但是Mybatis刚好弥补了这个痛点.这是我个