阅读量:0
在 MyBatis 中,可以使用 <if>
标签结合 SQL 的 CASE WHEN
语句来实现动态查询。以下是一个简单的示例:
首先,创建一个实体类 User
:
public class User { private Integer id; private String name; private Integer age; // 省略 getter 和 setter 方法 }
然后,在 MyBatis 的映射文件中编写动态查询的 SQL:
<select id="findUsersByCondition" resultMap="UserResultMap"> SELECT * FROM user <where> <if test="id != null"> AND id = #{id} </if> <if test="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> </where> <if test="orderBy != null and orderBy != ''"> ORDER BY ${orderBy} </if> </select>
在这个示例中,我们使用了 <where>
标签来自动处理 SQL 语句中的 WHERE
子句,避免了在查询条件为空时出现多余的 AND
关键字。同时,我们还使用了 <if>
标签来根据传入的参数动态生成查询条件。
接下来,创建一个结果映射类 UserResultMap
:
<resultMap id="UserResultMap" type="com.example.User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> </resultMap>
最后,在你的 DAO 接口中添加一个方法调用这个映射文件中的 SQL:
public interface UserDao { List<User> findUsersByCondition(@Param("id") Integer id, @Param("name") String name, @Param("age") Integer age, @Param("orderBy") String orderBy); }
现在,你可以通过传入不同的参数来调用 findUsersByCondition
方法,实现动态查询。例如:
List<User> users = userDao.findUsersByCondition(1, null, null, "age DESC");