MyBatis实现模糊查询的几种方式
MyBatis是一款流行的基于Java的持久层框架,它提供了强大灵活的方式来与数据库进行交互。在实际开发中,我们经常需要实现模糊查询来满足业务需求。今天,我们将探讨MyBatis实现模糊查询的几种方式。
使用${…}代替#{…}
在MyBatis的mapper文件中,我们可以使用${…}代替#{…}来实现模糊查询。例如:
```xml
<select id="searchStudents" resultType="com.example.entity.StudentEntity" parameterType="com.example.entity.StudentEntity">
SELECT * FROM test_student
<where>
<if test="age != null and age != '' and compare != null and compare != ''">
age
${compare}
#{age}
</if>
<if test="name != null and name != ''">
AND name LIKE '%${name}%'
</if>
<if test="address != null and address != ''">
AND address LIKE '%${address}%'
</if>
</where>
ORDER BY id
</select>
```
这种方式简单易用,但需要注意的是,使用${…}不能有效防止SQL注入,这种方式不推荐使用。
使用”%”#{name}”%”
另一种方式是使用”%”#{name}”%”来实现模糊查询。例如:
```xml
<select id="searchStudents" resultType="com.example.entity.StudentEntity" parameterType="com.example.entity.StudentEntity">
SELECT * FROM test_student
<where>
<if test="age != null and age != '' and compare != null and compare != ''">
age
${compare}
#{age}
</if>
<if test="name != null and name != ''">
AND name LIKE "%"#{name}"%"
</if>
<if test="address != null and address != ''">
AND address LIKE "%"#{address}"%"
</if>
</where>
ORDER BY id
</select>
```
这种方式可以防止SQL注入,是推荐使用的方式。
使用字符串拼接函数
最后一种方式是使用字符串拼接函数来实现模糊查询。例如:
```xml
<select id="searchStudents" resultType="com.example.entity.StudentEntity" parameterType="com.example.entity.StudentEntity">
SELECT * FROM test_student
<where>
<if test="age != null and age != '' and compare != null and compare != ''">
age
${compare}
#{age}
</if>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="address != null and address != ''">
AND address LIKE CONCAT('%', #{address}, '%')
</if>
</where>
ORDER BY id
</select>
```
这种方式也可以防止SQL注入,是推荐使用的方式。
MyBatis提供了多种方式来实现模糊查询,开发者可以根据实际情况选择合适的方式来实现业务需求。