影视怎么建设网站,网站需要网监备案,昆明网站建设多少钱,网页设计制作项目condition参数condition是什么为什么需要condition参数condition参数的重载方法设计condition的典型使用场景与示例condition是什么
condition 是 MyBatis-Plus 核心组件 Wrapper 体系中所有条件构建方法的可选布尔型入参#xff0c;也是实现条件动态生效的核心控制开关…condition参数condition是什么为什么需要condition参数condition参数的重载方法设计condition的典型使用场景与示例condition是什么condition 是 MyBatis-Plus 核心组件 Wrapper 体系中所有条件构建方法的可选布尔型入参也是实现条件动态生效的核心控制开关用于决定当前条件是否被解析并加入最终 SQL。为什么需要condition参数在基于 MyBatis 的持久层开发过程中动态组装 SQL 条件是高频场景前端传入的查询、更新等动态条件往往具备可选性若直接无条件拼接所有条件至 SQL 语句中会因参数为空值引发 SQL 语法规范的语法错误或逻辑错误。为解决动态条件组装问题传统 MyBatis 需在 XML 映射文件或注解中通过if标签嵌套实现条件判断该方式不仅导致代码冗余、维护成本高还将动态条件逻辑分散在 SQL 层与 Java 业务层不符合分层设计原则。而 MyBatis-Plus 的核心组件 Wrapper 条件构造器体系中设计了 condition 核心可选布尔型入参该参数可直接在 Java 代码层通过布尔值精准控制单个条件方法是否被解析并加入最终生成的 SQL 语句中。当 condition 为 true 时对应条件会被拼接至 SQL 的 WHERE/SET 子句当 condition 为 false 时该条件会被直接忽略。这一机制既规避了 SQL 语法和逻辑错误又将动态条件控制逻辑统一体现至 Java 代码层大幅简化动态 SQL 开发流程提升代码可维护性与分层合理性。condition参数的重载方法设计condition 参数的重载方法设计是 MyBatis-Plus 为兼顾默认生效和动态控制、以及适配多场景而制定的分层重载策略核心围绕是否携带 condition 参数构建两类重载分支同时让所有条件方法遵循统一的重载规则兼顾易用性、扩展性与 API 一致性。MyBatis-Plus 为所有核心条件构造方法统一设计了两类重载形式且该设计覆盖普通构造器QueryWrapper/UpdateWrapper和 Lambda 构造器LambdaQueryWrapper/LambdaUpdateWrapper无 condition 参数的重载版本方法仅接收列名普通构造器/ Lambda 列引用Lambda 构造器和值默认内置 condition true调用后条件必然被解析并加入 SQL适用于必选条件场景带 condition 参数的重载版本在无 condition 版本基础上新增布尔型 condition 入参条件是否被解析、加入 SQL 由该参数的布尔值决定适用于可选 / 动态条件场景。condition的典型使用场景与示例情况1动态条件查询的基础实现方式Testpublicvoidtest12(){Stringnamenull;IntegerageBegin10;IntegerageEnd24;QueryWrapperUserqueryWrappernewQueryWrapper();if(StringUtils.isNotBlank(name)){queryWrapper.like(name,a);}if(ageBegin!null){queryWrapper.ge(age,ageBegin);}if(ageEnd!null){queryWrapper.le(age,ageEnd);}ListUserusersuserMapper.selectList(queryWrapper);users.forEach(System.out::println);}这是动态条件查询的基础实现方式通过 if 语句逐个判断参数有效性仅当参数有效时才调用 QueryWrapper 的条件方法拼接 WHERE 子句。需要注意 StringUtils.isNotBlank 的导包需确保导入的是 org.apache.commons.lang3.StringUtils需引入 commons-lang3 依赖或 org.springframework.util.StringUtilsSpring 项目自带避免导包错误以及需要注意的是条件连接符MP 的 QueryWrapper 默认用 AND 连接多个条件若需要 OR 逻辑需显式调用 or() 方法。拼接的 sql 语句为SELECTid,name,age,emailFROMuserWHERE(age?ANDage?)情况2condition实现动态筛选条件Testpublicvoidtest12UseCondition(){Stringnamenull;IntegerageBegin10;IntegerageEnd24;QueryWrapperUserqueryWrappernewQueryWrapper();queryWrapper.like(StringUtils.isNotBlank(name),name,a).ge(ageBegin!null,age,ageBegin).le(ageEnd!null,age,ageEnd);ListUserusersuserMapper.selectList(queryWrapper);users.forEach(System.out::println);}和情况1的区别是情况2相当于将判断条件移至方法的第一个参数位置基于动态参数name 为空、ageBegin/ageEnd 有值构建查询条件仅当 name 非空时添加 name 模糊匹配 a’的条件仅当 ageBegin 非空时添加 age ageBegin 的条件仅当 ageEnd 非空时添加 age ageEnd 的条件拼接的 sql 语句为SELECTid,name,age,emailFROMuserWHERE(age?ANDage?)针对不同类型参数的 非null / 非空串 判断是 condition 最核心的使用场景字符串 非 null 且非空串StringUtils.isNotBlank(str)数值类型 非 nullnum ! null集合 非 null 且非空CollectionUtils.isNotEmpty(collection)情况3动态条件更新的基础实现方式Testpublicvoidtest13(){LonguserId1L;Stringnamenull;Integerage25;Stringemailnew123.com;UpdateWrapperUserupdateWrappernewUpdateWrapper();updateWrapper.eq(id,userId);if(StringUtils.isNotBlank(name)){updateWrapper.set(name,name);}if(age!null){updateWrapper.set(age,age);}if(StringUtils.isNotBlank(email)){updateWrapper.set(email,email);}userMapper.update(null,updateWrapper);}这是动态条件更新的基础实现方式通过 if 语句逐个判断参数有效性仅当参数有效时才调用 UpdateWrapper 的条件方法拼接 WHERE 子句。组装的 sql 语句为UPDATEuserSETage?,email?WHERE(id?)情况4condition实现动态更新Testpublicvoidtest13Update(){LonguserId1L;Stringnamenull;Integerage25;Stringemailnew123.com;UpdateWrapperUserupdateWrappernewUpdateWrapper();updateWrapper.eq(id,userId).set(StringUtils.isNotBlank(name),name,name).set(age!null,age,age).set(StringUtils.isNotBlank(email),email,email);userMapper.update(null,updateWrapper);}基于动态参数name 为空、id、age、email 有值构建动态更新条件指定更新 ID 为 1 的用户信息仅当 name 非空时更新其 name 字段仅当 age 非空时更新其 age 字段仅当 email 非空时更新其 email 字段组装的 sql 语句为UPDATEuserSETage?,email?WHERE(id?)情况5多条件动态查询Testpublicvoidtest16(){Stringname张;Integerage25;LonguserId1L;LambdaQueryWrapperUserwrappernewLambdaQueryWrapper();wrapper.and(w-w.gt(age!null,User::getAge,age).like(StringUtils.isNotBlank(name),User::getName,name)).or(w-w.eq(userId!null,User::getId,userId));ListUserusersuserMapper.selectList(wrapper);users.forEach(System.out::println);}查找年龄 25 且姓名含张或 ID1 的用户组装的 sql 语句为SELECTid,name,age,emailFROMuserWHERE((age?ANDnameLIKE?)OR(id?))