常见的面试题
1.mybatis相较与jdbc的优点?
把SQL语句从Java代码中抽取出来,方便维护。并且修改SQL时不需要修改Java代码,不用手动设置参数和对结果集的处理。
2.Hibernate和mybatis的区别(常见)
Hibernate是一个完整的ORM框架,功能更加强大,操作更加简单(性能不好控制),如果你要使用Hibernate控制性能,你必须是一个Hinernate高手。
对于一个大项目,Hibernate确实不是很合适,如果大项目一定要使用Hibernate,进行混合使用,一般的操作使用Hibernate,对于性能的要求比较高的使用原生的SQL。
mybatis不是完整的ORM框架,需要自己编写SQL语句。
好处:自己写SQL,自己控制性能。(更好控制)
坏处:自己写SQL,很麻烦
简单理解就是:
Hibernate是一个完整的ORM框架,使用更加简单,功能更加强大,性能不好控制(中小项目使用的多)
Mybatis也封装了很多的原生的JDBC,是一个半ORM框架,性能可控(SQL需要自己写)
Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成简单的SQL语句,自动执行,对于复杂的sql语句,Hibernate不需要自己编写,因此它的性能不是很好。
Hibernate框架技术最关键是数据持久化,是将数据保存到持久层的过程。持久层的数据在掉电后也不会丢失的数据。持久层是基于Hibernate技术的检索系统开发的基本。系统结构的层次模型有三个阶段。
mybatis
MyBatis 本是apache的一个开源项目iBatis,是一款优秀的半自动的orm框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
mybatis是一个支持普通的SQL查询,存储过程和高级映射的优秀持久层框架。
mybatis可以自动生成简单的SQL语句,自动执行,对于复杂的SQL,语句需要自己编写,因此具有更好的性能。
mybatis消除了几乎所有的JDBC代码和手工设置参数以及结果集检索
mybatis不能自动创建表,如果能够自动创建表,必须自己先准备好建表的SQL语句
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(普通的 Java对象)映射成数据库中的记录。
hibernate和mybatis的区别
ORM 的工作原理
1.以一定的映射方式,把实体模型和数据库关系的映射
2.ORM框架启动时加载这些映射和数据库配置文件
3.ORM通过对原生jdbc的封装提供更加便利的操作
4.Dao通过ORM提供便捷API对象的方式操作数据库关系
一、两者最大的区别
针对简单逻辑,Hibernate与MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。
针对高级查询,MyBatis需要手动编写SQL语句,以及ResultMap,而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于流程。
二、开发难度对比
Hibernate的开发难度大于MyBatis,主要由于Hibernate比较复杂,庞大,学习周期比较长。
MyBatis则相对简单,并且MyBatis主要依赖于生气了的书写,让开发者刚进更熟悉。
三、sql书写比较
Hibernate也可以自己写sql来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性,不过Hibernate具有自己的日志统计。
MyBatis的sql是手动编写的,所以可以按照要求指定查询的字段,不过没有自己的日志统计,所以要借助Log4j来记录日志。
四、数据库扩展性计较
Hibernate与数据库具体的关联在XML中,所以HQL对具体是用什么数据库并不是很关心
MyBatis由于所有sql都是依赖数据库书写的,所以扩展性、迁移性比较差。
五、缓存机制比较
Hibernate的二级缓存配置在SessionFactory生成配置文件中进行详细配置,然后再在具体的表对象映射中配置那种缓存。
MyBatis的二级缓存配置都是在每个具体的表对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓冲机制,并且MyBatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
两者比较,因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL,所以在使用二级缓存时如果出现脏数据,系统会报出错误提示。 而MyBatis在这一方面使用二级缓存时需要特别小心,如果不能完全去顶数据更新操作的波及范围,避免cache的盲目使用,否则,脏数据的出现会给系统的正常运行带来很大的隐患。