一、#{}和${}的区别
#{}:预编译处理;${}:字符串替换
1)Mybatis 在处理 #{} 时,会将 SQL 中的 #{} 替换为 ? 号,调用 PreparedStatement 的 set 方法 来赋值;使用 #{} 可以有效的防止 SQL 注入,提高系统安全性;
2)MyBatis 在处理 ${} 时,就是把${} 替换成变量的值。
二、是如何进行分页,分页插件的原理
1)MyBatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 SQL 内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
2)分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,根据 dialect 方言,添加对应的物理分页语句和物理分页参数
三、分页的四种方式
1)数组分页
2)SQL分页
3)拦截器分页
4)RowBounds分页
四、逻辑分页和物理分页的区别
1)物理分页速度上并不一定快于逻辑分页,逻辑分页速度上也并不一定快于物理分页。
2)物理分页总是优于逻辑分页:没有必要将属于数据库端的压力加到应用端来,就算速度上存在优势,然而其它性能上的优点足以弥补这个缺点。