foreach的介绍:

它的功能非常强大, 允许指定一个集合 声明可以在元素体内使用的集合项(item)和索引(index)变量,它也允许指定开头与结尾的字符串以及集合项迭代之间的分隔符,这个元素也不会错误地添加多余的分隔符 ,看它多智能!

我们可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach:

1:当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素
2:当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值

对于下述这条SQL语句,我们想通过属性id去实现迭代功能,就可以使用foreach语句!

select * from blog where 1=1 and (id=1 or id=2 or id=3)
<select id="queryforeach" parameterType="map" resultType="blog">
       select * from blog
       <where>
           <foreach collection="ids" item="id" open="and (" close=")" separator="or">
               id=#{id}
           </foreach>
       </where>
 </select>

它和前面标签的使用方法有些许相似,也是在where标签中做调整,collections=“ids”,是我们将由id组成的集合起名为ids,item则表示集合项,open表示迭代的“入口”,而close表示迭代的“出口”

foreach的使用:

接口中编写查询方法:

package dao;
import pojo.Blog;
import java.util.List;
import java.util.Map;
public interface BlogMapper {
    //使用foreach查询博客
    List<Blog> queryforeach(Map map);

.xml文件中编写SQL语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.BlogMapper">
    <select id="queryforeach" parameterType="map" resultType="blog">
        select * from blog
        <where>
            <foreach collection="ids" item="id" open="and (" close=")" separator="or">
                id=#{id}
            </foreach>
        </where>
    </select>
</mapper>
package dao.user;
import dao.BlogMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.Blog;
import utils.mybatis_utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyTest {
     @Test
     public void queryBlogIF() {
          SqlSession sqlSession= mybatis_utils.getSqlSession();
          BlogMapper mapper=sqlSession.getMapper(BlogMapper.class);
          HashMap map=new HashMap();
          //对比前面的方法,与之不同的为下面两行代码,其他方法是直接传属性的值,而这里是将要输出的值放入集合中,再将集合传递进去
          ArrayList<Integer> ids=new ArrayList<>();//该集合用来存放要迭代的id值
          ids.add(1);//将id=1的对象加入集合中
          map.put("ids",ids);
          List<Blog> blogList=mapper.queryforeach(map);
          for (Blog blog : blogList) {
               System.out.println(blog);
          sqlSession.close();

将id=1,加入集合,最终输出,id等于1这条记录:

未将任何的id加入集合,最终所有数据均被输出:

动态SQL语句就是在拼接sql语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就好了

方法即为:先在Mysql中写出完整的SQL,再对应的去修改成为我们动态SQL实现即可

它的功能非常强大,允许指定一个集合声明可以在元素体内使用的集合项(item)和索引(index)变量,它也允许指定开头与结尾的字符串以及集合项迭代之间的分隔符,这个元素也不会错误地添加多余的分隔符,看它多智能!
foreach:实例一 collection:需要遍历的集合或者数组名字,等会你传入的数字集合的名字 item:这个是下面你需要变量出来的东西的名字,随便起,只要下面#{}中对应就可以,相当于接受遍历出来的数据 open:前缀,如下面的语句应该要写where id in(x,x,x),所以前缀就是 id in( separator:这应该算中间缀,就是中间要加的东西们这里要加逗号,也可以加and or这种 close:这就是后缀了,一般都是)这些后缀 #{id}:这个id就是item命名的,东西会接受到遍历
MyBatis 提供了动态 SQL 的功能,可以按照条件动态生成 SQL 语句。 动态 SQL 语句可以使用 XML 或注解的方式来编写。下面以 XML 的方式来演示如何使用动态 SQL。 MyBatis 的动态 SQL 语句主要有以下几种标签: - if:判断条件是否成立,成立则执行 SQL 语句 - choose、when、otherwise:类似于 switch 语句,根据条件选择执行的 SQL 语句 - foreach:循环遍历集合或数组,生成多条 SQL 语句 - set:设置更新语句的属性值 - where:设置查询语句的条件 下面是一个使用 if 和 where 标签的动态 SQL 示例: ```xml <select id="getUserList" resultType="User"> SELECT * FROM user <where> <if test="name != null"> AND name = #{name} <if test="age != null"> AND age = #{age} </where> </select> 这个示例中,如果传入的参数 name 不为空,则在 SQL 语句中添加一个条件 name = #{name},如果传入的参数 age 不为空,则在 SQL 语句中添加一个条件 age = #{age}。最终生成的 SQL 语句类似于: ```sql SELECT * FROM user WHERE name = '张三' AND age = 20 以上是 MyBatis 动态 SQL 的简单示例,更多的语法和标签请参考 MyBatis 官方文档。