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>
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>
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); } }
运行:
可以发现语句和查询都对的上号。
本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15151889.html