面试官:小伙子你来介绍一下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架构图:

image.png

(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是否支持延迟加载?如果支持,它的实现原理是什么?

本次的内容大致的就介绍到这里拉,由于内容太多,只能简单介绍到这里,如有需要以上内容的解析完整版,评论区暗号333,大家可以我获取哦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0KngGDDd-1657448853579)(https://upload-images.jianshu.io/upload_images/28142708-9c0a611ca54562c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值