18个MyBatis高频知识及学习笔记,啃完面试不愁!

01 18个MyBatis高频知识点(含解析)

  1. 精讲#{}和${}的区别是什么?
  2. 数据库链接中断如何处理?
  3. 在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?
  4. 事务执行过程中宕机的应对处理方式?
  5. 高性能服务器端端开发底层主要靠I/O复用来处理,这种模式:
  6. Mybatis中的Dao接口和XML文件里的SQL是如何建立关系的?
  7. 当实体类中的属性名和表中的字段名不一样,怎么办 ?
  8. 模糊查询like语句该怎么写?
  9. 什么是MyBatis的接口绑定?有哪些实现方式?
  10. 使用MyBatis的mapper接口调用时要注意的事项
  11. 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
  12. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
  13. Mybatis的一级、二级缓存的作用是什么?
  14. Mybatis 是如何进行分页的?分页插件的原理是什么?
  15. Mybatis 动态 SQL 是做什么的?都有哪些动态 SQL ?能简述一下动态 SQL 的执行原理吗?
  16. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
  17. Mybatis都有哪些Executor执行器?它们之间的区别是什么?
  18. MyBatis与Hibernate区别?

1 精讲#{}和${}的区别是什么?

  • mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值。
  • mybatis在处理时就是把{}替换成变量的值。
  • 使用#{}可以有效的防止SQL注入,提高系统安全性。原因在于:预编译机制。预编译完成之后,SQL的结构已经固定,即便用户输入非法参数,也不会对SQL的结构产生影响,从而避免了潜在的安全风险。
  • 预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。

给大家整理了mybatis的脑图,结合本文一起去学习,事半功倍,想要了解的,【脑图】滴我可取~

2 数据库链接中断如何处理?

数据库的访问底层是通过tcp实现的,当链接中断是程序是无法得知,导致程序一直会停顿一段时间在这,最终会导致用户体验不好,因此面对数据库连接中断的异常,该怎么设置mybatis呢?

connection操作底层是一个循环处理操作,因此可以进行时间有关的参数:

  • max_idle_time : 表明最大的空闲时间,超过这个时间socket就会关闭
  • connect_timeout : 表明链接的超时时间

数据库服务器活的杠杠的,但是因为网络用塞,客户端仍然连不上服务器端,这个时候就要设置timeout,别一直傻等着

3 在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?

插入的过程一般都是分两步的:先判断是否存在记录,没有存在则插入否则不插入。如果存在并发操作,那么同时进行了第一步,然后大家都发现没有记录,然后都插入了数据从而造成数据的重复

解决插入重复的思路 :

  • 先判断数据库是否存在数据,有的话则不进行任何操作。没有数据的话,进行下一步;
  • 向redis set key,其中只有一个插入操作A会成功,其他并发的操作(B和C...)都会失败的 ;
  • 当set key 成功的操作A,开始执行插入数据操作,无论是否插入数据成功,都在需要将redis key删除。【注】插入不成功可以多尝试几次,增加成功的概率 ;
  • 然而set key 失败的操作B和C,sleep一下,竞争赢的插入操作重复以上步骤。

总结:多线程同时插入数据,谁获取锁并插入数据成功了其他线程不做任何操作。当插入数据失败后,其他线程抢锁进行插入数据。

由于篇幅有限,完整版18个Mybatis高频知识点如下所示:

18个Mybatis高频知识点

02 32道面试常见的MyBtis题目+解析

  1. 什么是 MyBatis?讲下 MyBatis 的缓存
  2. Mybatis 是如何进行分页的?分页插件的原理是什么?
  3. 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
  4. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
  5. {}和${}的区别是什么?

  6. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  7. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  8. MyBatis 与 Hibernate 有哪些不同?
  9. MyBatis 的好处是什么?
  10. 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
  11. 什么是 MyBatis 的接口绑定,有什么好处?
  12. 接口绑定有几种实现方式,分别是怎么实现的?
  13. 什么情况下用注解绑定,什么情况下用 xml 绑定?
  14. MyBatis 实现一对一有几种方式?具体怎么操作的?
  15. Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
  16. MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?
  17. Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
  18. Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
  19. 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
  20. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
  21. Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
  22. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
  23. Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
  24. Mybatis 中如何指定使用哪一种 Executor 执行器?
  25. Mybatis 执行批量插入,能返回数据库主键列表吗?
  26. Mybatis 是否可以映射 Enum 枚举类?
  27. 如何获取自动生成的(主)键值?
  28. 在 mapper 中如何传递多个参数?
  29. resultType resultMap 的区别?
  30. 使用 MyBatis 的 mapper 接口调用时有哪些要求?
  31. Mybatis 比 IBatis 比较大的几个改进是什么?
  32. IBatis 和 MyBatis 在核心处理类分别叫什么?在细节上的不同有哪些?

1 什么是 MyBatis?

答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。

2 讲下 MyBatis 的缓存

答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓

存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化

接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>

3 Mybatis 是如何进行分页的?分页插件的原理是什么?

答:

1)Mybatis 使用 RowBounds 对象进行分页,也可以直接编写 sql 实现分页,也可以使用

Mybatis 的分页插件。

2)分页插件的原理:实现 Mybatis 提供的接口,实现自定义插件,在插件的拦截方法内拦

截待执行的 sql,然后重写 sql。

举例:select * from student,拦截 sql 后重写为:select t.* from (select * from student)tlimit 0,10

4 简述 Mybatis 的插件运行原理,以及如何编写一个插件?

答:

1)Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、

Executor 这 4 种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理对象以实

现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是

InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。

2)实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写注解,指定

要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

篇幅有限,完整版32道面试常见的Mybatis题目+解析如下所示:

32道面试常见的Mybatis题目+解析

03 MyBatis技术内幕(书籍PDF)

  1. 第1章 MyBatis快速入门
  2. 第2章 基础支持层
  3. 第3章 核心处理层
  4. 第4章 高级主题

希望分享的知识都可以帮助到大家,也希望大家学了都能有收获~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值