mybatis foreach标签详解,逗号,and还有or,留一个

2019-10-30 13:25:17

情景:查询数据库中文章的相关文章   文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割

查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这个集合作为条件来查询


 

1
2
3
4
5
6
7
<select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
  select * from t_news n where
  <foreach collection="listTag" index="index" item="tag" open="("
    separator="," close=")">
   #{tag} in n.tags
  </foreach>
 </select>

  

看。 foreach 生成的效果是集合 转化为下面的

 select * from t_news n where ( ? in n.tags , ? in n.tags )

 


foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名.

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.

open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.

close表示以什么结束.

 

1
2
3
4
5
6
7
<select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
  select * from t_news n where
  <foreach collection="listTag" index="index" item="tag" open=""
    separator="or" close="">
   #{tag} in n.tags
  </foreach>
 </select>

  

所以 去除左右括号 和 把,改成 or 进行 。 就可以转化为这种形式。
select * from t_news n where ? in n.tags or ? in n.tags   这样可以用List<String> 来查。

 

但是查不到数据
需要使用如下方式:

1
2
3
4
5
6
7
<select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
  select * from t_news n where
  <foreach collection="listTag" index="index" item="tag" open=""
    separator="or" close="">
    n.tags like  '%'||#{tag}||'%'
  </foreach>
<select>

  

生成的SQL为

select * from t_news n where n.tags like ? or n.tags like ?    

 

foreach : 用的更多的地方为: 根据Id批量删除    /    判断什么 in 集合中(此时需要生成(**,***,)的形式)


  • 2019-11-07 08:47:00

    详解vue2.6插槽更新v-slot用法总结

    在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。这篇文章主要介绍了详解vue2.6插槽更新v-slot用法总结,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  • 2019-11-08 09:34:46

    CSS3 Transition详解和使用

    Transition 可以设置 CSS 属性的过渡效果,它有以下几个属性。 transition-property 用于指定应用过渡属性的名称 transition-duration 用于指定这个过渡的持续时间 transition-delay 用于指定延迟过渡的时间 transition-timing-function 用于指定过渡的类型 transition-property transition-property 用于指定应用过渡的属性名称,可以指定多个属性名称,多个属性名称之间用, 分隔。 默认值为 all 也就是所有的元素都应用过渡效果。 例如,想让容器的宽高有一个过渡的效果,就可以这样写:

  • 2019-11-09 19:16:35

    java标记过期方法

    java注解:@Deprecated(不建议使用的,废弃的);@SuppressWarnings(忽略警告,达到抑制编译器产生警告的目的)