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实现即可