在类似于select * from user where id in(1,2,3…);这种包含不确定参数条件时,需要用到foreach语句来处理,用法示例如下:
mapper:
public interface UserMapper {
//查找多个id的用户数据
public List<User> findUserByIds(UserQueryVO vo);
}
xml配置:
<?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.gyf.mapper.UserMapper">
<!-- 4.foreac使用讲解-->
<select id="findUserByIds" parameterType="userQueryVO" resultType="user">
<!--性别和名字 SELECT * FROM user WHERE id in (1,2,3) -->
SELECT * FROM user
<where>
<if test="ids != null and ids.size > 0">
<!--
collection:集合,写集合属性
item:遍历接收变量
open:遍历开始
close:遍历结束
separator:拼接格式
for(Integer id : ids){
}
-->
<foreach collection="ids" item="id" open="id in(" close=")" separator=",">
${id}
</foreach>
</if>
</where>
</select>
</mapper>
测试类:
public class Demo01 {
SqlSession session;
@Before
public void before() throws IOException {
System.out.println("before....获取session");
//读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//通过SqlSessionFactory创建SqlSession
session = sessionFactory.openSession();
}
@After
public void after(){
session.close();
}
@Test
public void test4() throws IOException {
UserMapper userMapper = session.getMapper(UserMapper.class);
UserQueryVO query = new UserQueryVO();
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(10);
ids.add(16);
query.setIds(ids);
List<User> users = userMapper.findUserByIds(query);
System.out.println(users);
}
}