在项目管理系统中,模糊查询数据最为常见,mybatis模糊查询的实现也非常简单,只需要在映射文件中通过元素编写相应的SQL语句,并通过SqlSession的查询方法执行该SQL即可。 Mybaits实现模糊查询方法也有多种多样,下面总结了实现几种不同的方法,其具体实现方法如下。
- 通过${}字符串拼接符拼接
在映射文件Permsisson. xml 中,添加根据权限名模糊查询权限信息列表的SQL语句,其中用了mybatis提供的字符串拼接符${value},属性值必须为value,拼接的是简单类型参数,这种字符串拼接符来拼接sql可以实现模糊查询,但是对于一些安全性要求比较高的项目,无法防止SQL注入,一般不推荐这种方法,具体实现代码如下:
<!-- 查询所有用户权限 -->
<select id="selectPermissonList" parameterType="string"
resultType="UPermission">
SELECT u_permission.* FROM u_permission
<if test="info != '' and info!=null ">
<where>
u_permission.name like '%${value}%'
</where>
</if>
</select>
- 通过concat()方法拼接
对于安全性比较高的项目,可以用这种方式来拼接sql语句,这样既可以实现模糊查询,也可以防止sql注入问题,可以对上面的映射文件Permsisson.xml中的模糊查询的select语句进行修改,使用MySQL中的concat()函数进行字符串拼接, 具体修改示例如下所示:
<!-- 查询所有用户权限 -->
<select id="selectPermissonList" parameterType="string"
resultType="UPermission">
SELECT u_permission.* FROM u_permission
<if test="info != '' and info!=null ">
<where>
u_permission.name like concat('%',#{info},'%')
</where>
</if>
</select>
- 通过标签绑定元素
在进行模糊查询编写SOL语句的时候,如果使用"${}“进行字符串拼接,则无法防止SOL注入问题;如果使用concat函数进行拼接,则只针对MySOL数据库有效;如果使用的是Oracle数据库,则要使用连接符号”||"。 这样,映射文件中的SOL就要根据不同的情况提供不同形式的实现,这显然是比较麻烦的,且不利于项目的移植。 为此,MyBatis提供了元素来解决这一问题,我们完全不必使用数据库语言,只要使用MyBatis的语言即可与所需参数连接:
<!-- 查询所有用户权限 -->
<select id="selectPermissonList" parameterType="string"
resultType="UPermission">
SELECT u_permission.* FROM u_permission
<if test="info != '' and info!=null ">
<!-- 绑定元素 -->
<bind name="info" value="'%'+info+'%'" />
<where>
u_permission.name like #{info}
</where>
</if>
</select>