在MyBatis-Plus开发中,XML动态SQL的条件判断是核心功能之一。本文将详细介绍如何使用<choose><when><otherwise>标签实现类似Java中if-else的逻辑控制,并提供完整的代码示例。

动态SQL条件判断实现

基础if条件判断


xml

复制

<if test="id != null"> AND id = #{id} </if>

if-else完整实现

使用<choose><when><otherwise>标签实现多条件分支:


xml

复制

<choose> <when test="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </when> <otherwise> AND name IS NOT NULL </otherwise> </choose>

多条件分支示例


xml

复制

<choose> <when test="age != null and age < 18"> AND age_group = 'minor' </when> <when test="age != null and age >= 18 and age < 60"> AND age_group = 'adult' </when> <when test="age != null and age >= 60"> AND age_group = 'senior' </when> <otherwise> AND age_group IS NULL </otherwise> </choose>

集合条件判断


xml

复制

<if test="statusList != null and statusList.size() > 0"> AND status IN <foreach collection="statusList" item="status" open="(" close=")" separator=","> #{status} </foreach> </if>

完整Mapper实现


Java

复制

package com.example.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.entity.User; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; public interface UserMapper extends BaseMapper<User> { List<User> selectUsersByCondition( @Param("id") Long id, @Param("name") String name, @Param("age") Integer age, @Param("statusList") List<Integer> statusList ); }

关键技术要点

技术点 说明
<choose> 相当于Java中的switch语句
<when> 相当于case分支,使用OGNL表达式
<otherwise> 相当于default分支
数值比较 直接使用< >等符号
字符串比较 test="name == 'foo'.toString()"
集合判断 test="list != null and list.size() > 0"

依赖配置


xml

复制

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <dependencies> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> </dependencies> </project>

页面的所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,请仔细甄别

原文地址:

https://comate.baidu.com/zh/page/s7hynivjdua

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐