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

  • 相关阅读:
    POJ 2749
    POJ 3422
    POJ 3621
    SQLSERVER 2005 重新安装过程中的疑难解决
    可遇不可求的Question之MySqlClient访问字段返回System.Byte[]篇
    可遇不可求的Question之odbc驱动无法加载
    可遇不可求的BUG之采用MYSQL odbc 3.51访问数据库返回值缺失
    可遇不可求的Bug之Convert.Int32(<未定义的值>)等于0
    可遇不可求的Question之数据库操作超时篇
    可遇不可求的Question之数据库 'tempdb' 的日志已满。
  • 原文地址:https://www.cnblogs.com/xiohao/p/5315271.html
Copyright © 2011-2022 走看看