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();
    }
}
posted @ 2022-07-24 12:03  Oh,mydream!  阅读(122)  评论(0编辑  收藏  举报