面试官:小伙子你来介绍一下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面试题#
全部评论
解析333
点赞 回复 分享
发布于 2022-07-06 20:34

相关推荐

头像
11-26 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
19 72 评论
分享
牛客网
牛客企业服务