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实现即可
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81369.html