备战秋招--mybatis篇

本文介绍了MyBatis中的#{}

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如何编写一个自定义插件?

就说知道有这么回事,但是自己不会写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java登云楼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值