mybatis篇
125、mybatis中的#{}和${}有什么区别?
mybatis在处理#{}时,会将sql语句中的#{}替换为?,调佣preparestatement的set方法来赋值。
mybatis在处理时,会将{}时,会将时,会将{}替换为变量的值。
使用#{}可以有效的防止sql注入,提高系统的安全性。
126、mybatis有几种分页方式?
物理分页:sql分页
逻辑分页:拦截器分页、rowbounds分页
127、RowBounds 是一次性查询全部结果吗?为什么?
不是,因为mybatis是对jdbc的封装,jdbc驱动力有一个fetch size配置,它规定了每次从数据库中拿多少数据出来。如果想要拿更多的数据出来,它会在你执行next()的时候去查询更多的数据。
128、mybatis逻辑分页和物理分页的区别是什么?
逻辑分页在速度上不一定快于物理分页;物理分页在速度上不一定快于逻辑分页。
物理分页总是优于逻辑分页,没必要将数据库端的压力拿到应用端来,就算它在速度上有优势,但是其他方面的性能足以弥补这个缺点。
129、mybatis是否支持延迟加载?延迟加载的原理是什么?
mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在mybatis配置文件中,可以配置是否开启延迟加载。
它的原理是,使用cglib创建目标对象的代理类对象,当调用目标方法时,进入拦截器方法,比如调用a.getb().getName(),拦截器invoke()方法发现a.getb()的值为null,那么就会发送事先保存好的查询关联b对象的sql,把b查询出来,然后调用a.setb(b),于是a对象就有了b属性,接着完成a.getb().getName()方法。
130、说一说mybatis的一级缓存和二级缓存?
一级缓存是基于perpetualcache的hashmap本地缓存,其存储的作用域是session,默认打开一级缓存。
二级缓存也是基于perpetualcache的hashmap缓存,但作用域为namespace。
先走二级缓存再走一级缓存最后去查数据库。
131、mybatis 和 hibernate 的区别有哪些?
hibernate 框架没接触过,问了就说不会。
132、mybatis 有哪些执行器(Executor)?
不用管,问了就说不会。
133、mybatis分页插件的实现原理是什么?
通过mybatis提供的插件接口,实现自定义插件。在拦截器的方法内拦截待执行的sql,然后重写sql语句,通过dialect方言添加相应的物理分页语句和物理分页参数。
134、mybatis如何编写一个自定义插件?
就说知道有这么回事,但是自己不会写。
本文介绍了MyBatis中的#{}
2978

被折叠的 条评论
为什么被折叠?



