温馨提示×

Mybatis中case when如何处理复杂逻辑

小樊
82
2024-10-13 15:06:34
栏目: 编程语言

在 MyBatis 中,可以使用 <if> 标签结合 SQL 语句中的 CASE WHEN 来处理复杂的逻辑。以下是一个示例:

首先,创建一个实体类 Person

public class Person {
    private Integer id;
    private String name;
    private Integer age;
    // 省略 getter 和 setter 方法
}

然后,在 MyBatis 的映射文件中编写动态 SQL 查询:

<select id="findPersons" parameterType="map" resultMap="personResultMap">
    SELECT * FROM person
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
        <if test="minAge != null and maxAge != null">
            AND age BETWEEN #{minAge} AND #{maxAge}
        </if>
    </where>
</select>

在这个示例中,我们使用 <where> 标签来确保查询条件以 “AND” 连接。<if> 标签用于根据参数是否为 null 来决定是否添加相应的查询条件。

接下来,创建一个结果映射文件 personResultMap

<resultMap id="personResultMap" type="com.example.Person">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
</resultMap>

现在,你可以在 Java 代码中调用这个查询方法:

List<Person> persons = sqlSession.selectList("com.example.PersonMapper.findPersons", null);

这个示例展示了如何在 MyBatis 中使用 <if> 标签和 SQL 语句中的 CASE WHEN 来处理复杂的逻辑。你可以根据需要调整查询条件和逻辑。

0