怎么把网站改为正在建设中站长之家站长工具
标签
if标签
当提交的表单中有些为非必填项,用户并没有上传这些属性的值,那么程序可以上传NUll,也可以用if标签判断用户有没有上传这个值
<if test="参数!=null">操作
</if>
其中test中填写一条语句,如果得到true,就执行下面的操作,否则就不执行
例如,添加username,password和photo属性
UserMapper
int add2(UserInfo userInfo);
UserMapper.xml:
需要注意逗号的位置,如果photo未传输数值,那么形成的句子就是username,password,不会有语法问题
<insert id="add2">insert into userinfo(username,<if test="photo != null">photo,</if>password)values(#{username},<if test="photo != null">#{photo},</if>#{password})
</insert>
UserMapperTest:
@Test
void add2() {UserInfo userInfo = new UserInfo();userInfo.setUsername("zhangsan");userInfo.setPhoto(null);userInfo.setPassword("333");int result = userMapper.add2(userInfo);System.out.println(result);
}
可以看到,当photo并没有传值时,生成的JDBC语句中就没有photo
trim标签
如果所有的属性都是非必填项,那么逗号的位置就很难确定了,因此可以使用trim标签来拼接字符串
<trim prefix="前缀内容" suffix="后缀内容" prefixOverrides="去除前缀相关值" suffixOverrides="去除后缀相关值"></trim>
- prefix会在最前面添加内容
- suffix会在最后面添加内容
- prefixOverrides则是如果最后一个字符是指定值,就去掉该值(例如prefixOverrides=“,”,那么如果最前面是逗号就会去除最前面的逗号)
- suffixOverrides则是去除最后面的值
一般来说,trim会搭配if标签来使用,例如下面这个场景:username,password,photo都是非必填项
UserMapper:
int add3(UserInfo userInfo);
UserMapper.xml
这里会自动添加(),并且如果最后是逗号,会删除这个逗号
<insert id="add3">insert into userinfo<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">username,</if><if test="password != null">password,</if><if test="photo != null">photo,</if></trim>values<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">#{username},</if><if test="password != null">#{password},</if><if test="photo != null">#{photo},</if></trim></insert>
UserMapperTest:
@Test
void add3() {UserInfo userInfo = new UserInfo();userInfo.setUsername("lisi");userInfo.setPhoto(null);userInfo.setPassword("444");int result = userMapper.add2(userInfo);System.out.println(result);
}
可以看到确实去除了password后面的逗号(也就是最后一个字符)
where标签
用来查找相关信息,会生成where的语句
- where标签一般也是配合if来使用
- where标签会自动帮助我们删除最前面的and关键字
- where标签中如果没有内容,那么就不会产生where的关键字
也就是说,下面这两种写法都是可以的,只不过where的写法更加简介
<select id="getListByParam" resultType="com.example.demo.entity.UserInfo">select * from userinfo<where><if test="username!=null">username = #{username}</if><if test="password!=null">and password = #{password}</if></where>
</select>
<select id="getListByParam" resultType="com.example.demo.entity.UserInfo">select * from userinfo<trim prefix="where" prefixOverrides="and"><if test="username!=null">username = #{username}</if><if test="password!=null">and password = #{password}</if></trim>
</select>
set标签
用来更改属性的值,会自动生成set语句
- set标签一般配合if标签使用
- set标签会自动去除最后一个逗号(英文)
<update id="update2">update userinfo<set><if test="username != null">username = #{username},</if><if test="password != null">password = #{password},</if><if test="photo != null">photo = #{photo}</if></set>where id = #{id}
</update>
也可以使用trim来完成这段代码
foreach标签
当我们需要大批量进行操作时,可以在代码中使用for循环,也可以直接在sql中进行批量操作,具体方法就是使用in()
语法格式:
<foreach collection="集合变量" open="前缀" close="后缀" item="集合中变量名" separator="分隔符">操作
</foreach>
例如,要删除大量指定id的用户信息:
UserMapper:
int deleteById(List<Integer> ids);
UserMapper.xml:
<delete id="deleteById">delete from userinfo where id in<foreach collection="ids" open="(" close=")" item="id" separator=",">#{id}</foreach>
</delete>
UserMapperTest:
@Test
void deleteById() {List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(2);ids.add(3);int result = userMapper.deleteById(ids);System.out.println(result);
}