美文网首页
动态SQL标签

动态SQL标签

作者: allen716 | 来源:发表于2021-03-21 18:32 被阅读0次

我们在写复杂的SQL语句时,稍不注意就可能出现错误。

而动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach标签,可组合成非常灵活的SQL语句。

既能提高开发人员的效率,又可以减少出错。

1.foreach标签

1.1foreach实现in集合

  • java代码
public void testForEach() {
    List<String> idList = new ArrayList<>();
    idList.add("1");
    idList.add("2");
    idList.add("3");
    List<User> users = userMapper.selectUserByUserIdList(idList);
    users.forEach(System.out::println);
}
  • SQL:
<select id="selectUserByUserIdList" resultType="cn.no7player.model.User">
  SELECT
      id, name, age, password
  FROM
      user
  WHERE id IN
    <foreach collection="list" open="(" close=")" separator="," item="id">
        #{id}
    </foreach>
</select>

说明:如果传入的是List集合,则<foreach>中的 collection默认是"list"
<foreach>标签中collection属性

如果在selectUserByUserIdList( ) 传参时用了 @Param("xxx") 注解,则collection为"xxx"

java代码:

List<User> selectUserByUserIdList(@Param("idLists") List<String> idList);

SQL语句:

<select id="selectUserByUserIdList" resultType="cn.no7player.model.User">
  SELECT
      id, name, age, password
  FROM
      user
  WHERE id IN
    <foreach collection="idLists" open="(" close=")" separator="," item="id" index="i">
        #{id}
    </foreach>
  </select>

1.2foreach实现批量插入

java代码:

public void testForEach2() {
        List<User> userList = new ArrayList<>();
        userList.add(new User(0,"GEM", 28, "999999"));
        userList.add(new User(0,"JAY", 36, "777777"));
        int i = userMapper.insertUsers(userList);
        System.out.println(i);
}

SQL语句:

<insert id="insertUsers" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO
      user(name, age, password)
  VALUES
  <foreach collection="list" separator="," item="user">
      (
      #{user.name},
      #{user.age},
      #{user.pwd}
      )
  </foreach>
</insert>

相关文章

网友评论

      本文标题:动态SQL标签

      本文链接:https://www.haomeiwen.com/subject/trlocltx.html