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

  • 相关阅读:
    Centos安装mysql 5.6
    Cache和Buffer都是缓存,主要的区别是什么?
    服务器遭受攻击后的处理过程
    划船学python——语法(二)循环语句
    划船学python——语法(一)条件语句
    划船学python——初识数据类型
    FTP与SFTP区别
    说一说Nginx Proxy配置
    Virtual Box 中的虚拟系统无法调整分辨率(无法自适应窗口大小)
    [error]subprocess.CalledProcessError: Command '['which', 'g++']' returned non-zero exit status 1.
  • 原文地址:https://www.cnblogs.com/xiohao/p/5315271.html
Copyright © 2011-2022 走看看