6. 动态 SQL 之<foreach>

SELECT * from user where id in(1,2,4)

这个语句就是 查找 id = 1 或 id = 2 或 id = 4 。

那就可以用<foreach> 这个标签来写:

其中他的属性我先列举:

标签用于遍历集合,它的属性:

• collection:代表要遍历的集合元素,注意编写时不要写#{}

• open:代表语句的开始部分

• close:代表结束部分

• item:代表遍历集合的每个元素,生成的变量名

• sperator:代表分隔符 

 

 

1.先编写接口:

 

2.编写核心配置文件

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

<configuration>
    <properties resource="datasourceInfo.properties"></properties>
    <typeAliases>
        <typeAlias type="com.bihu.Bean.User" alias="User"></typeAlias>
        <typeAlias type="java.util.List" alias="list"></typeAlias>
    </typeAliases>

    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/bihu/mapper/UserMapper.xml"></mapper>
    </mappers>

</configuration>
mybatis核心配置文件

 

3.编写映射文件:

<?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.bihu.Dao.UserMapper">

    <select id="findIds" parameterType="list" resultType="user">        <!--已list、user设置别名-->
        <!--原本语句: SELECT * from user where id in(1,2,4) -->
        select * from user
        <where>
            <foreach collection="list" open="id in(" close=")" item="id" separator=",">
                #{id}
            </foreach>
        </where>
    </select>



    </mapper>
mybatis 映射文件

 

4.编写Service层 (模拟) 查询层

    package com.bihu.Service;


    import com.bihu.Bean.User;
    import com.bihu.Dao.UserMapper;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;

    public class UserService {
        public static void main(String[] args) throws IOException {

            //模拟数据来源
            List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            //下面开始操作
            InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
            SqlSession sqlSession = build.openSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> ids = mapper.findIds(list);
            System.out.println(ids);


        }
    }
View Code

 

运行:

 

 

可以发现语句和查询都对的上号。

 

posted @ 2021-08-17 13:29  咸瑜  阅读(219)  评论(0编辑  收藏  举报