zoukankan      html  css  js  c++  java
  • mybatis foreach标签的解释 与常用之处

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

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

    <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表示以什么结束.

    <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> 来查。

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

    <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 集合中(此时需要生成(**,***,)的形式)

  • 相关阅读:
    Add Binary
    Java笔记之String
    Java笔记之数组
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Longest Common Prefix
    Roman to Integer
    Palindrome Number
    Reverse Integer
    _cdel stdcall
  • 原文地址:https://www.cnblogs.com/xiohao/p/5315271.html
Copyright © 2011-2022 走看看