官方网站链接如何做,现在哪个行业做网站需求多点,泉州网站制作平台,新网站怎么做流畅文章目录动态 SQL1. if 标签2. trim 标签3. where 标签4. set 标签5. foreach 标签回顾一下#xff0c;在上一篇 MyBatis 之三#xff08;查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection#xff09;中#xff0c;学习了针对查询操作的相关知识点…
文章目录动态 SQL1. if 标签2. trim 标签3. where 标签4. set 标签5. foreach 标签回顾一下在上一篇 MyBatis 之三查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection中学习了针对查询操作的相关知识点理解了占位符 #{}与 ${}的区别还有 like 查询要使用 concat() 进行拼接针对字段名称和属性名不同时要使用resultMap重点学习了一对一查询用 association一对多查询用 collection 以及这两个标签对应属性的学习 本篇将学习 MyBatis 强大特性之一的动态 SQL
动态 SQL
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架你应该能理解根据不同条件拼接 SQL 语句有多痛苦例如拼接时要确保不能忘记添加必要的空格还要注意去掉列表最后一个列名的逗号。利用动态 SQL可以彻底摆脱这种痛苦。
使用动态 SQL 并非一件易事但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言MyBatis 显著地提升了这一特性的易用性。
1. if 标签 if 标签作用判断一个参数是否有值如果没值那就会隐藏 if 中的 sql !-- 添加用户测试 if 标签photo 是非必传参数 --
insert idadd2insert into userinfo(username,passwordif testphoto!null,photo/if) values(#{name},#{password}if testphoto!null,#{photo}/if)
/insert2. trim 标签
如果在某种情况下所有的属性为非必填那么你不知道哪个属性肯定会填上按照 的做法这就会导致可能某个字段后面出现“”的问题
这就要考虑使用标签结合标签对多个字段都采取动态⽣成的⽅式 标签作用去除 SQL 语句前后多余的某个字符其属性有
prefix表示整个语句块以prefix的值作为前缀suffix表示整个语句块以suffix的值作为后缀prefixOverrides表示整个语句块要去除掉的前缀suffixOverrides表示整个语句块要去除掉的后缀 !-- 添加用户其中 username、password、photo 都是非必传参数 --
insert idadd3insert into userinfotrim prefix( suffix) suffixOverrides,if testname!nullusername,/ifif testpassword!nullpassword,/ifif testphoto!nullphoto/if/trimvaluestrim prefix( suffix) suffixOverrides,if testname!null#{name},/ifif testpassword!null#{password},/ifif testphoto!null#{photo}/if/trim
/insert3. where 标签
where 标签作用实现查询中的 where 替换它可以实现如果没有任何的查询条件那么它可以隐藏查询中的 where sql但如果存在查询条件那么会生成 where 的sql 查询并且使用 where 标签可以自动的去除最前面的一个 and 字符
!-- 根据 id 查询用户 --
select idgetUserById resultMapBaseMapselect * from userinfowhereif testid!nulland id#{id}/if/where
/select不传参数时 传参数时 where 标签也可以使⽤ trim prefix“where” prefixOverrides“and” 替换 4. set 标签
set 标签作用进行修改操作时配合 if 来处理非必传参数的它的特点是会自动去除最后一个英文逗号 !-- 修改用户 测试 set 标签 --
update idupdate2update userinfosetif testname!nullusername#{name},/ifif testpassword!nullpassword#{password},/ifif testphoto!nullphoto#{photo}/if/setwhere id#{id}
/updateset标签也可以使⽤ trim prefix“set” suffixOverrides“,” 替换 5. foreach 标签 标签作用对集合进行循环的。其属性
collection绑定⽅法参数中的集合如 ListSetMap或数组对象item遍历时的每⼀个对象open语句块开头的字符串close语句块结束的字符串separator每次遍历之间间隔的字符串
!-- 删除用户测试 foreach 标签 --
delete iddelIdsdelete from userinfo where id in foreach collectionids open( close) itemid separator,#{id}/foreach
/delete