MyBatis干货——常见面试题

1、什么时MyBatis 答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。
2、讲下 MyBatis 的缓存 答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓 存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化 接口(可用来保存对象的状态),可在它的映射文件中配置

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

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

2)分页插件的原理:实现 Mybatis 提供的接口,实现自定义插件,在插件的拦截方法内拦 截待执行的 sql,然后重写 sql。

举例:select * from student,拦截 sql 后重写为:select t.* from (select * from student)t limit 0,10
4、#{}和${}的区别是什么?1)#{}是预编译处理,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值,#{}有效的防止SQL注入;
2)${}是字符串替换,把${}替换成变量的值。

5、接口绑定有几种实现方式,分别是怎么实现的?接口绑定有两种方式:
1)一种是通过注解绑定,就是在接口的方法上面加@Select、@Update等注解,里面包含SQL语句来绑定;
2)另一种是通过xml里面写SQL来绑定,在这种情况下,要指定xml映射文件里面的 namespace ,必须为接口的全路径名。
6、什么情况下用注解绑定,什么情况下用xml绑定? 当SQL语句比较简单用注解绑定;当SQL语句比较复杂的时候,用xml绑定。
7、通常一个XML映射文件,都会写一个DAO接口与之对应,DAO是否可以重载? 不能重载,因为通过DAO寻找XML对应的SQL的时候,是全路径名 + 方法名(二维坐标)的寻找策略。
接口工作原理是JDK动态代理原理,运行时会为DAO生成proxy,代理对象会拦截接口方法,去执行对应的SQL返回数据。
8、MyBatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复? 不同的Xml映射文件,如果配置了 namespace,那么id可以重复;如果没有配置 namespace, 那么id是不能重复的,namespace不是必须的
【MyBatis干货——常见面试题】原因是:namespace + id是作为Map的key 使用的,如果没有 namespace, 只剩id, id重复就会导致数据相互覆盖;有namespace,id就可以重复,namespace不同, namespace + id 也就不同

    推荐阅读