第二部分:Mybatis思路分析
问题:<br> 请完善自定义持久层框架,在现有代码基础上添加修改及删除功能<br>思路:<br>(1) 修改XMLMapperBuilder的parse方法:解析<update><delete>标签<br>(2) 在SqlSession及DefalutSqlSession添加update及delete方法<br>(3) 在getMapper方法中对当前执行的sql语句进行判断,决定调用增删改查的那个方法<br>(4) 在Executor及simpleExecutor中添加update及delete方法<br>
第三部分:mybatis若干问题
mybatis collection 如何解决n+1问题(批量查询sql,many 一方会产生 n次io查询请求)
对于动态代理的使用场景有点困惑,Mybatis因为使用了代理模式,所以只创建mapper接口,然后定义操作数据库的方法,无需创建mapper实例对象,这都理解,但是在动态代理的demo中,Person本身已经定义了子类Bob,然后再执行 Person proxyPerson = new JDKDynamicProxy(new Bob()).getTarget(); 把Bob的实例对象作为参数传给了动态代理对象,为什么这里动态代理的使用又和子类实例对象联系在了一起?不是说不需要接口的实现类吗?这里很困惑,不知道什么场景应该使用动态代理,如何使用才是合理的?
在一对多返回结果集映射中,为什么collection的映射主键属性使用<id>就只会返回一条记录,而使用<result>就可以返回多条记录。
#和$的区别和联系
为什么mapper中paramterType不能设置为对象属性的类型,如User中int型属性id,paramterType设成Integer,执行时报反射异常。
既然有一级缓存、二级缓存,为什么还要用redis做缓存呢?
CachingExecutor对二级缓存的实现原理和存储过程?以及一二级缓存的协调互斥性?
当库表外键字段与对应表主键字段一样时,resultMap里的column该怎么设置
介绍下mybatis的日志模块,工作原理,如何利用日志进行排障
xml与注解方式的开发各有利弊。注解方式每次改了sql都要重新编译,这种模式方便了开发,真正开发中是否可取?
jdbc批量插入10000条数据跟在一个session中执行10000次插入,有区别吗?
sqlsession线程安全与不安全?并发情况如何保证线程安全?
通过注解的方式完成crud,传递多个参数,能否做一下演示?
sql注入是怎么一回事?使用mybatis哪些地方要防止sql注入?
pageHelper对于一对多分页嵌套结果集的方式会分页不准确,不使用嵌套子查询(效率太低),有什么好的解决方案吗,如自定义一对多分页的思路等
Mybatis如何执行批处理?
mybatis插件在实际项目中具体有哪些应用,多举些例子吧,像记录操作日志或数据埋点适合使用吗?
用PerpetualCache作为二级缓存应该有线程安全问题吧
分布式的情况下,一级缓存也会导致脏数据的读取,这样有解决方案吗?
sqlsessionFactoryBuilder采用的是建造者模式还是策略模式?
自定义的插件不需要一个执行顺序吗?
动态sql中是如何解析每个节点,在mappedstatement中是以何种形式存储的?
Mybatis的执行器BaseExecutor, CachingExecutor, ClosedExecutor 有啥用?
mybatis在插入过程中主键的生成原理,以及过程。
使用注解开发的时候如果牵扯的表多的话,或者是SQL复杂的话,感觉不如直接使用SQL简单明了;
二级缓存开启后,一级缓存还存在吗?源码中从一级缓存取数据时好像并没有判断二级缓存是否开启
一级缓存,某张表执行更新操作后,是所有表的缓存失效,还是只有相关表的缓存失效?
一级缓存,某张表执行更新操作后,是所有表的缓存失效,还是只有相关表的缓存失效?
mybatis中配置事务管理类型为“JDBC”,底层具体事务是怎么控制实现的?
Mybatis是怎么实现延迟加载的,它背后的原理是什么?
模板方法模式和策略模式区分不清。
讲一下SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession的应用范围和生命周期吗?
MyBatis 的 mapper 接口调用时有哪些要求?
在部分公司的实战环境中不推荐甚至禁止$出现在映射xml中,核心原因是什么?仅仅是因为SQL注入导致的安全问题?
mybatis-plus在项目中的选型是否可以考虑,和mybatis相比有什么好的地方
如何对mybatis进行性能调优?从哪几个方面入手?