结合上个博客一起看哦
上篇博客我们说.用户在表中插入数据的时候,有的数据可能不想插入,我们就需要设置,当用户插入这个字段的数据的时候就显示,不插入的话就为null,比如性别不想插入,那么 XML 代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.mapper.UserInfo2Mapper"><insert id="insertByXML">insert into userinfo(username,password,age,<if test="gender!=null">gender,</if>phone)values(#{username},#{password},#{age},<if test="gender!=null">#{gender},</if>#{phone})</insert>
</mapper>
那如果每个字段都像性别那样设置,代码该如何去写呢,以此类推大概是下面这样的写法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.mapper.UserInfo2Mapper"><insert id="insertByXML">insert into userinfo(<if test="username!=null">username,</if><if test="password!=null">password,</if><if test="username!=null">age,</if><if test="gender!=null">gender,</if><if test="phone!=null">phone</if>)values(<if test="username!=null">#{username},</if><if test="password!=null">#{password},</if><if test="age!=null">#{age},</if><if test="gender!=null">#{gender},</if><if test="phone!=null">#{phone}</if>)</insert>
</mapper>
按理来说是上面这样写,但是插入数据的时候,假如有两个字段没插入数据,那就会因为逗号的问题报错.比如 gender 和 phone 都没插入数据,那么 age 就成了最后的数据,age 后面跟着逗号就不行
具体错误的日志我这里就不展示了,接下来我们说怎么解决逗号的问题
所以我们需要引入 trim标签 帮我们解决逗号问题
把 trim 标签给加上 ,我们把括号也交给 trim 处理
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.mapper.UserInfo2Mapper"><insert id="insertByXML">insert into userinfo<trim suffixOverrides="," prefix="(" suffix=")"><if test="username!=null">username,</if><if test="password!=null">password,</if><if test="age!=null">age,</if><if test="gender!=null">gender,</if><if test="phone!=null">phone</if></trim>values(<trim suffixOverrides=","><if test="username!=null">#{username},</if><if test="password!=null">#{password},</if><if test="age!=null">#{age},</if><if test="gender!=null">#{gender},</if><if test="phone!=null">#{phone}</if></trim>)</insert>
</mapper>
然后我们试试只添加三个字段的数据
package com.example.mybatisdemo.mapper;import com.example.mybatisdemo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
class UserInfo2MapperTest {@Autowiredprivate UserInfo2Mapper userInfo2Mapper;@Testvoid insertByXML() {UserInfo userInfo = new UserInfo();userInfo.setUsername("ppp");userInfo.setPassword("555www");userInfo.setAge(23);//userInfo.setGender(1);//userInfo.setPhone("177966");userInfo2Mapper.insertByXML(userInfo);}
}
没问题