Mybatis中case when怎样实现动态查询

avatar
作者
筋斗云
阅读量: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"); 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!