【MyBatis框架】mapper配置文件-foreach标签
foreach标签
下面介绍一下一个mapper配置文件中的foreach标签(注意,要跟着前面的总结来看,这里使用的例子是结合前面的工程写的,大部分代码没有再赘述)
foreach的作用是向sql传递数组或List,mybatis使用foreach解析
1.1需求
在用户查询列表和查询总数的statement中增加多个id输入查询。
sql语句如下:
两种方法:
SELECT * FROM USER WHERE id=1 OR id=3 OR id=5
SELECT * FROM USER WHERE id IN(1,3,5)
1.2在输入参数类型中添加List<Integer> ids传入多个id
public class UserQueryVo {
//传入多个id
private List<Integer> ids;
public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
}
......
}
1.3修改mapper.xml
WHERE id=1 OR id=3 OR id=5
在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。
- <pre name="code" class="html"><!-- 定义sql片段
- id:sql片段的唯一标识
- 在sql片段中不要加入where
- 经验:一般我们定义sql片段是为了可重用性,是基于单表来定义sql片段,
- 这样的话这个sql片段可重用性才高-->
- <sql id="query_user_where">
- <if test="ids!=null">
- <!-- 使用foreach遍历传入ids
- collection指定输入对象中集合属性
- item每次遍历生成的对象名
- open开始遍历时要拼接的串
- close开始遍历时要拼接的串
- separator遍历的两个对象中间需要拼接的串
- -->
- <!-- 使用实现下边的sql拼接
- WHERE (id=1 OR id=3 OR id=5)-->
- <foreach collection="ids" item="user_id" open="AND (" close=")" separator="OR">
- <!-- 每次遍历要拼接的串 -->
- id=#{user_id}
- </foreach>
- </if>
- </sql>
- <!-- 用户信息综合查询 -->
- <select id="findUserList" parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo"
- resultType="cn.edu.hpu.mybatis.PO.UserCustom">
- select * from user
- <!-- where标签可以自动去掉第一个and -->
- <where>
- <!-- 应用sql片段的id,如果refid指定的id不再本mapper文件中,需要前边加namespace -->
- <include refid="query_user_where"></include>
- <!-- 在这里还可能要引用其他的sql片段 -->
- </where>
- </select>
在mapper接口类中添加相应方法:
- //用户管理的Dao接口
- public interface UserMapper {
- //用户信息综合查询
- public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
- ......
- }
1.4测试代码
- //用户信息综合查询
- @Test
- public void testFindUserList() throws Exception{
- SqlSession sqlSession=sqlSessionFactory.openSession();
- //创建UserMapper代理对象
- UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
- //创建包装对象,设置查询条件
- UserQueryVo userQueryVo=new UserQueryVo();
- //传入多个Id
- List<Integer> ids=new ArrayList<Integer>();
- ids.add(1);
- ids.add(3);
- ids.add(5);
- //将ids通过userQueryVo传入statement中
- userQueryVo.setIds(ids);
- //调用userMapper的方法
- List<UserCustom> users=userMapper.findUserList(userQueryVo);
- for (int i = 0; i < users.size(); i++) {
- UserCustom user=(UserCustom)users.get(i);
- System.out.println(user.getId()+":"+user.getUsername());
- }
- }
测试结果:
1:张三
3:刘莉莉
5:刘三姐
日志输出:
- DEBUG [main] - Opening JDBC Connection
- DEBUG [main] - Created connection 6867819.
- DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@68cb6b]
- DEBUG [main] - ==> Preparing: select * from user WHERE ( id=? OR id=? OR id=? )
- DEBUG [main] - ==> Parameters: 1(Integer), 3(Integer), 5(Integer)
- DEBUG [main] - <== Total: 3
可以看到,sql语句select * from user WHERE ( id=? OR id=? OR id=? ) 通过foreach输出成功
1.5另外一个sql的实现:
- <!-- 使用实现下边的sql拼接
- AND ID IN(1,3,5)-->
- <foreach collection="ids" item="user_id" open="AND ID IN(" close=")" separator=",">
- <!-- 每次遍历要拼接的串 -->
- #{user_id}
- </foreach>
【MyBatis框架】mapper配置文件-foreach标签相关推荐
- Mybatis系列:解决foreach标签内list为空的问题
我把之前发布在简书的两篇文章通过拦截器Interceptor优化Mybatis的in查询 和Mybatis中foreach标签内list为空的解决方案进行了整合,整理为本文的内容.此外,我还对代码部分 ...
- Idea中Spring整合MyBatis框架中配置文件中对象注入问题解决方案
运行环境:Spring框架整合MaBitis框架 问题叙述: 在Spring配置文件applicationContext-mybatis.xml中配置好mybatis之后 <?xml versi ...
- 【MyBatis框架】配置文件-resultMap总结
resultMap总结 resultType: 作用: 将查询结果按照sql列名pojo属性名一致性映射到pojo中. 场合: 常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页 ...
- c++框架有哪些_Java Mybatis框架入门教程_v20200726
MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...
- Java SE MyBatis框架(详解)
Java SE MyBatis框架 目录 Java SE MyBatis框架 通用框架 1.lib 2.src 2.1.mybatis.xml 2.2.DateBase.properties 2.3. ...
- MyBatis框架知识
代理模式 什么是代理模式? 代理模式相当于一个桥梁,代理对象负责增强功能(超市不负责生产) 为什么需要代理模式? 无法直接访问目标对象 代理对象举例? 房东-----------目标对象房屋中介--- ...
- MyBatis框架学习 DAY_02:使用XML配置文件/多参数问题 / FOREACH /IF / #{}和${} / 创建SSM框架流程
XML文件配置SQL 1. 使用XML文件配置SQL语句 2. 关于多参数的问题 2. 练习 3. 动态SQL -- foreach 4. 动态SQL -- if 5. 关于#{}和${}格式的占位符 ...
- Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。
1. Mybatis工作流程 1.1 使用MySQL创建数据库girls并生成一个表boys,如下图. 1.2 创建该表对应的简单实体类Boys,如下图. 1.3 创建Dao接口以及和接口同名的map ...
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
最新文章
- RGB Color Codes Chart
- SAP日记之一-漫漫自学路
- 作家百态之一:作家、批评家与酒
- 使用cadence建封装
- 【设计模式】第二章 代理模式
- 区块链的有趣应用:买彩票、云养鸡、查茅台
- 入职第一天:接口自动化测试怎么测
- 开发必学的验证码,教你从零写一个验证码
- 英语翻译软件测试简历,如此翻译-2 - Victor's Testing Career - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 《Redis入门指南(第 2 版)》读后感
- ffmpeg 推流 m3u8 播放 EasyDarwin 存储录像和播放
- MAC小技巧|Mac屏幕截图去除窗口阴影
- 任正非谈管理--读书笔记
- 5G无线网络优化覆盖
- 专家学者热议智慧交通:大数据云计算,出行有“千里眼”
- Regulator的使用
- 【渝粤题库】陕西师范大学200111中学语文教学法 作业(专升本)
- 推荐Layui镜像网站
- python 桑基图 地理坐标_利用Python+Excel制作桑基(Sankey)图
- python numpy 子数组_详解:Python 取numpy数组的某几行某几列方法(含对与错示例)...