mybatis的动态sql之if test的使用说明

时间:2021-05-19

参数为String,if test读取该参数代码

<select id="getMaxDepartId" parameterType="java.lang.String" resultType="java.lang.String"> SELECT MAX(DEPART_ID) FROM T_P_DEPART <where> <if test="_parameter!=null and _parameter!=''"> AND DEPART_PID = #{departId,jdbcType=VARCHAR} </if> <if test="_parameter==null or _parameter==''"> AND DEPART_PID IS NULL </if> </where> </select>

参数为pojo , if test读取该参数代码

<select id="findShopByName" parameterType="ShopVo" resultType="ShopCustomer"> select * from shop <where> <if test="shopCustomer.shopname!=null and shopCustomer.shopname!=''"> shop.shopname like '%${shopCustomer.shopname}%' </if> <if test="shopCustomer.shopname==null or shopCustomer.shopname==''"> AND shop.shopname is null </if> </where></select>

补充:关于mybatis中 if test的条件怎么写

1.mybatis 中 的 if test写法

1.1官方文档上对于if是这么写的

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

参考官方文档:

实际项目中会有这种情况: 页面上title字段输入某个值进行查询,手动将输入框中的值删除,然后再次查询,发现结果不正确,究其原因是应为title传入了空串" " 这样在mybatis配置文件中就会用空串进行查询,导致出现错误结果

1.2建议写法

<if test="title != null and title != ''" > AND title like #{title}</if>

2.使用mybatis 做修改时将字段置空

if中如果传入的参数如果为空,那么将不会执行if中的语句

解决办法:

<update id="updateObject" parameterType="*.*.Object" >update table <set> <if test="Object.fullName == null or Object.fullName ==''"> full_name = null, </if> <if test="Object.fullName != null and Object.fullName !=''"> full_name = #{companyOrg.fullName}, </if> <if test="Object.level == null or Object.level ==''"> level = null, </if> <if test="Object.level == 0 "> level = null, </if> <if test="Object.level != null and Object.level !='' and Object.level != 0 "> level = #{companyOrg.level}, </if> </set> where 1=1 and id =#{companyOrg.id}</update>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章