MyBatis
# MyBatis是如何进行分页的
- 直接在Select语句上增加数据库提供的分页关键字,让后在应用程序里面传递当前页以及每页展示的条数
- 使用MyBatis提供的RowBounds对象,实现内存级别的分页,可以执行查询后的结果集进行截取,但是这种方法不适合大数据集,因为它会加载所有符合条件的数据到内存中在进行截取,不过JDBC会进行一些优化,不会一次性加载所有数据,会加载一部分数据,再根据需要滚动加载其他数据
- 基于MyBatis里面的Interceptor拦截器,在Select语句只需之前动态的拼接分页关键字,一些第三方插件就是使用的这种方法,如PageHelper
- 可以优先使用数据库层面的分页,在一些复杂分页场景考虑使用PageHelper这样的插件
# #{}和${}的区别是什么
#{}、${} 两种占位符都是实现动态SQL的方式,
#{} 会被MyBatis替换为PreparedStatement预编译SQL语句中的问号(?),然后将参数传递给PreparedStatement对象,而且会对特殊字符进行转义。这种方式可以有效防止SQL注入攻击。MyBatis还会根据传入参数的类型自动转换成相应的数据库类型
而${} 是直接将传入的参数值替换到SQL语句中,MyBatis不会对它进行任何特殊处理。这意味着它不具备任何防护措施来阻止SQL注入攻击。通常用于无法使用预编译SQL的占位符,如动态表名、列名等非用户输入的场景。
上次更新: 2025/3/30 21:03:27