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

  • 相关阅读:
    例20:希尔排序
    例19:直接插入排序
    例14:计算某日是该年的第几天
    为自己
    hdoj--1027--Ignatius and the Princess II(dfs)
    UESTC--758--P酱的冒险旅途(模拟)
    nyoj--990--蚂蚁感冒(模拟)(思维题)
    历届试题 邮局(dfs+剪枝)
    历届试题 数字游戏
    历届试题 回文数字
  • 原文地址:https://www.cnblogs.com/xiohao/p/5315271.html
Copyright © 2020-2023  润新知