[MyBatis]-10 动态SQL_forearch


prtyaa
prtyaa 2023-12-27 16:23:29 63861
分类专栏: 资讯

forearch

另外一个动态 SQL 通用的必要操作是迭代一个集合, 通常是构建在 IN 条件中的.

正常的sql 语句中使用in的例子

select * from tb_user where id in(1,2,3,4)

在mysql 中,就将后面的查询的条件(1,2,3,4) 封装成一个集合传入,并且用forearch处理

接口代码

package com.lin.mapper;

import com.lin.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {
  
    /**
     * 动态查询 In
     * @param list
     * @return
     */
    List<User> selIn(@Param("list") List<Integer> list);

}

 

mapper代码

参数说明

collection :传入的集合名称

open:以什么符号作为左外拼接 一般根据sql语法 用 (

separator:以什么符号作为分隔 , 一般根据sql语法 用 ,

close :以什么符号作为右外拼接,一般根据sql语法 用 )

item:遍历的集合名

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.lin.mapper.UserMapper">
   
    <select id="selIn" parameterType="list" resultType="User">
        select * from tb_user where id in
        <foreach collection="list" open="(" separator="," close=")" item="item">
            #{item}
        </foreach>
    </select>
</mapper>

测试代码

package com.lin.test;


import com.lin.mapper.UserMapper;
import com.lin.pojo.User;
import com.lin.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class TestDynamicSql {

    @Test
    public void testIn(){
        SqlSession session = MyBatisUtil.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        List<User> userList = mapper.selIn(list);
        for (User user : userList) {
            System.out.println(user);
        }
        session.close();
    }

}

测试结果

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31585
赞同 0
评论 0 条