Mybatis系列--15-动态sql之sql标签和foreach标签
Mybatis系列--15-动态sql之sql标签和foreach标签
概述
本文主要讲述Mapper.xml中sql
标签和foreach
标签
sql
标签
sql
标签比较好理解,就是把一些通用的或者可能会被复用的sql提取出来,供其他语句使用,减少重复代码
使用:使用sql
标签 添加id 定义sql的内容,在需要引用的地方,使用
<sql id="for-ids">
<foreach item="id" collection="ids" index="index" open="id in (" separator="," close=")" nullable="true">
#{id}
</foreach>
</sql>
<select id="getBlogsForEach" parameterType="String" resultType="blog">
select * from blog
<where>
<include refid="for-ids"></include>
</where>
</select>
foreach
标签
上面的例子中把foreach也引出来了,foreach主要用于in 后面参数填充的时候,比如我们想查询id在某个集合中的所有blog的信息,我们传入进来一个ids,在sql中如何处理?这就是foreach解决的问题
item 指出每一项你的命名,例如命名为id
collections 传入的集合的名字
index 不是特别理解
open 以什么作为开始
separator 分割符
close 以什么作为结束
nullable 是否可以为空
把 例子写全
BlogMapper.java
package com.kuang.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.kuang.pojo.Blog;
/**
* 功能描述
*
* @since 2022-07-22
*/
public interface BlogMapper {
List<Blog> getBlogsForEach(@Param("ids") List<String> ids);
}
BlogMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.BlogMapper">
<select id="getBlogsForEach" parameterType="String" resultType="blog">
select * from blog
<where>
<include refid="for-ids"></include>
</where>
</select>
<sql id="for-ids">
<foreach item="id" collection="ids" index="index" open="id in (" separator="," close=")" nullable="true">
#{id}
</foreach>
</sql>
</mapper>
测试代码
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.kuang.dao.BlogMapper;
import com.kuang.pojo.Blog;
import com.kuang.util.IdUtil;
import com.kuang.util.MyBatisUtil;
/**
* 功能描述
*
* @since 2022-07-22
*/
public class MyTest {
@Test
public void TestGetBlogsForEach() {
SqlSession sqlsession = MyBatisUtil.getSqlsession();
BlogMapper mapper = sqlsession.getMapper(BlogMapper.class);
List<String> list = new ArrayList();
// 添加自己的id
// list.add("xxx");
// list.add("xxx");
// list.add("xxx");
List<Blog> blogs = mapper.getBlogsForEach(list);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlsession.close();
}
}