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)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不是必须的

原因是:namespace + id是作为Map<String, MappedStatement>的key 使用的,如果没有 namespace, 只剩id, id重复就会导致数据相互覆盖;有namespace,id就可以重复,namespace不同, namespace + id 也就不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值