一,$和#的区别
Mybatis中#
和$
的区别主要在于数据处理方式和用途:
符号 | 描述 | 用途 | 安全性 |
---|---|---|---|
# | 使用PreparedStatement处理,参数值作为绑定变量的值传入 | 通用查询、防止SQL注入 | 较高 |
$ | 直接替换SQL语句中的值,参数值直接拼接到SQL语句中 | 动态表名、列名等场景,需谨慎使用 | 较低 |
使用#
可以有效防止SQL注入,而$
则需要在可控的情况下谨慎使用。
二,Mybatis实现分页的方法
手动分页:在SQL查询中直接使用LIMIT
和OFFSET
子句进行分页。
拦截器SQL注入:
使用Mybatis拦截器实现分页通常涉及到创建一个自定义的拦截器来拦截SQL语句,并在SQL执行前对其进行修改,加入分页的相关逻辑。以下是基本的步骤:
-
创建拦截器:实现Mybatis的
Interceptor
接口。 -
拦截SQL操作:在
intercept
方法中,判断当前操作是否为查询操作。 -
添加分页逻辑:根据分页参数(如页码和每页大小),修改原始SQL语句,加入分页的SQL(如
LIMIT
和OFFSET
)。 -
配置拦截器:在Mybatis配置文件中注册自定义拦截器。
这种方式允许在不修改原始查询逻辑的情况下,透明地添加分页功能。但实现起来相对复杂,需要考虑不同数据库的分页语法差异。