上海市建设工程安全质量监督总站网站,主要网站域名,手机网站建设推广方案ppt,网络推广运营公司目录
一、if标签
二、trim标签
三、where标签
四、set标签
五、foreach标签 一、if标签
当我们在某个平台提交某些信息时#xff0c;可能都会遇到这样的问题#xff0c;有些信息是必填信息#xff0c;有些信息是非必…目录
一、if标签
二、trim标签
三、where标签
四、set标签
五、foreach标签 一、if标签
当我们在某个平台提交某些信息时可能都会遇到这样的问题有些信息是必填信息有些信息是非必填信息例如使用CSDN发布博客时 那么程序猿在不确定某个字段是否会被用户传入时该如何拼接SQL呢这就需要使用if标签来判断某个字段是否被用户输入。
代码示例 insert idinsertUserinsert into userinfo(username, passwordif testphoto ! null,photo/if) values(#{username}, #{password}if testphoto ! null,#{photo}/if)/insert
单元测试代码 Testvoid insertUser() {UserInfo userInfo new UserInfo();userInfo.setUsername(apple);userInfo.setPassword(123);userInfo.setPhoto(null);int ret userMapper.insertUser(userInfo);System.out.println(ret);}
代码执行结果 可以看到photo为空时最终构造的SQL语句并没有拼接photo字段。
注意
(1) if标签必须包含test属性如果test属性中的内容为true则执行if标签语句中的内容如果为false则不执行此时数据库中该字段的值为默认值。
(2) if标签中判断的字段必须是可以为null的字段如果判断的字段不允许为null程序会在执行期间报错。
二、trim标签
如果所有字段都是非必填信息那么就需要使用trim标签结合if标签对多个字段都采取动态生成的方式。
代码示例 insert idinsertUser2insert into userinfotrim prefix( suffix) suffixOverrides,if testusername!nullusername,/ifif testpassword!nullpassword,/ifif testphoto!nullphoto,/if/trimtrim prefixvalues ( suffix) suffixOverrides,if testusername!null#{username},/ifif testpassword!null#{password},/ifif testphoto!null#{photo},/if/trim/insert
trim标签中的4个属性所表示的含义
prefix表示整个语句块以prefix的值作为前缀
suffix表示整个语句块以suffix的值作为后缀
prefixOverrides表示整个语句块要去掉的前缀
suffixOverrides表示整个语句块要去掉的后缀。
三、where标签
where标签需要配合if标签来使用用来接收动态参数进行查询数据库操作。
代码示例 select idselectUsers resultTypecom.example.demo.model.UserInfoselect * from userinfowhereif testusername ! nullusername#{username}/ifif testpassword ! nulland password#{password}/if/where/select
注意
(1) where标签会删除语句块的前缀内容(and)
(2) where标签中的字段如果都为null那么就不会生成where关键字。
上述示例代码也可以使用trim prefixwhere prefixOverridesand替换。
四、set标签
set标签可以配合if标签根据用户传入的参数来修改数据用法和where标签类似。
代码示例 update idupdateUserupdate userinfosetif testusername ! nullusername#{username},/ifif testpassword ! nullpassword#{password},/ifif testphoto ! nullphoto#{photo},/if/setwhere id#{id};/update
注意
(1) set标签会删除语句块的后缀内容(,)
(2) set标签中的字段如果都为null那么就不会生成set关键字。
上述示例代码也可以使用trim prefixset suffixOverrides,替换。
五、foreach标签
foreach标签用于对集合进行遍历例如根据多个文章id删除文章。
代码示例 delete iddeleteUsersdelete from userinfo where id inforeach collectionlist open( close) itemid separator,#{id}/foreach/delete
foreach标签中的5个必要属性
collection集合的名称(对应方法中的集合的参数名)
item遍历集合时集合中每个对象的名字
separator每次遍历之间以什么字符串间隔
open语句块的前缀内容
close语句块的后缀内容。
用一段伪代码来解释上述5个属性