面试官:小伙子你来介绍一下MyBatis
什么是MyBatis
MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
总之,Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。
下图是MyBatis架构图:
(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2)基于SqlSessionFactory可以生成SqlSession对象
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是SqlSession底层的对象,用于执行SQL语句
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
为什么要使用MyBatis
思考:在开始之前,思考下如何通过JDBC查询Emp表中的所有记录,并封装到一个List集合中返回。(演示:准备数据、导包、导入JDBC程序)
1、使用传统方式JDBC访问数据库:
(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);
(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;
(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译;
(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;
2、使用mybatis框架访问数据库:
(1)Mybatis对JDBC对了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。
总之,JDBC中所有的问题(代码繁琐、有太多重复代码、需要操作太多对象、释放资源、对结果的处理太麻烦等),在Mybatis框架中几乎都得到了解决!!
下面是一些面试常见题,希望可以帮助到需要的小伙伴们
1、什么是Mybatis?
2、Mybaits的优点?
3、MyBatis框架的缺点?
4、MyBatis框架适用场合
5、MyBatis与Hibernate有哪些不同?
6、#{} 和${}的区别是什么?
7、当实体类中的属性名和表中的字段名不一样,怎么办?
8、 模糊查询like语句该怎么写?
9、通常一个Xml映射文件,都会写一个Dao接口与之对应, 请问,这个Dao接口的工作原理是什么?Dao接口里的方法, 参数不同时,方法能重载吗?
10、Mybatis是如何进行分页的?分页插件的原理是什么?
11、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
12、 Mybatis如何执行批量操作
13、如何获取自动生成的(主)键值?
14、在mapper中如何传递多个参数?
15、Mybatis动态sql有什么用?执行原理?有哪些动态 sql?
16、Xml映射文件中,除了常见的select|insert|updae|delete 标签之外,还有哪些标签?
18、为什么说Mybatis是半自动ORM映射工具?它与全动的区别在哪里?
19、 一对一、一对多的关联查询 ?
20、MyBatis实现一对一有几种方式?具体怎么操作的?
21、MyBatis实现一对多有几种方式,怎么操作的?
22、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
23、Mybatis的一级、二级缓存:
24、什么是MyBatis的接口绑定?有哪些实现方式?
25、使用MyBatis的mapper接口调用时有哪些要求?
26、Mapper编写有哪几种方式?
27、简述Mybatis的插件运行原理,以及如何编写一个插件?
28、传统JDBC开发存在什么问题?
29、JDBC编程有哪些不足之处,MyBatis是如何解决的?
30、MyBatis编程步骤是什么样的?
31、请说说MyBatis的工作原理?
32、MyBatis的功能架构是怎样的?
33、MyBatis的框架架构设计是怎么样的?
34、什么是DBMS?
35、为什么需要预编译?
36、Mybatis都有哪些Executor执行器?它们之间的区别是什么?
37、Mybatis中如何指定使用哪一种Executor执行器?
38、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,
收藏 等于白嫖,点赞才是真情。
#Java找工作##后端开发##Java开发##java实习##java面试题#