MyBatis动态SQL——foreach标签

本文记录Java学习过程中遇到的MyBatis动态SQL——foreach标签~

向SQL传递数组或List,MyBatis使用foreach解析。

例如:根据多个id查询用户信息

示例代码(SQL):

SELECT * FROM user WHERE id IN (1,10,24)

示例代码(QueryVo):

@Data
public class QueryVo {

	private User user;

	private List<Interger> ids;
}

示例代码(UserMapper.xml):

<!-- 根据ids查询用户 -->
<select id="queryUserByIds" parameterType="queryVo" resultType="user">
	SELECT * FROM `user`
	<where>
		<!-- foreach标签,进行遍历 -->
		<!-- collection:遍历的集合,这里是QueryVo的ids属性 -->
		<!-- item:遍历的项目,可以随便写,,但是和后面的#{}里面要一致 -->
		<!-- open:在前面添加的sql片段 -->
		<!-- close:在结尾处添加的sql片段 -->
		<!-- separator:指定遍历的元素之间使用的分隔符 -->
		<foreach collection="ids" item="item" open="id IN (" close=")" separator=",">
			#{item}
		</foreach>
	</where>
</select>

示例代码(测试代码):

@Test
public void testQueryUserByIds() {
	// mybatis和spring整合,整合之后,交给spring管理
	SqlSession sqlSession = this.sqlSessionFactory.openSession();
	// 创建Mapper接口的动态代理对象,整合之后,交给spring管理
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	// 使用userMapper执行根据条件查询用户
	QueryVo queryVo = new QueryVo();
	List<Integer> ids = new ArrayList<>();
	ids.add(1);
	ids.add(10);
	ids.add(24);
	queryVo.setIds(ids);

	List<User> list = userMapper.queryUserByIds(queryVo);

	for (User u : list) {
		System.out.println(u);
	}

	// mybatis和spring整合,整合之后,交给spring管理
	sqlSession.close();
}

标签: none