MyBatis传入参数为list、数组、map写法
1.foreach简单介绍:
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束,
collection属性是在使用foreach的时候最关键的也是最容易出错的,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
(1)如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
(2)如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
(3)如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.
(4)如果传入的是单个参数且参数类型为List的时候,使用@Param()注释参数名字,那么collection属性值为参数名字。例:[2]
Dao:
List<User> findListByIds(@Param("idList")List<String> idList);
XML
<select id="findListByIds" parameterType="java.util.List" resultType="User">select * from t_user where id in<foreach item="item" index="index" collection="idList" open="(" separator="," close=")">#{item}</foreach>
</select>
2.实践-实体类
- public class Employees {
- private Integer employeeId;
- private String firstName;
- private String lastName;
- private String email;
- private String phoneNumber;
- private Date hireDate;
- private String jobId;
- private BigDecimal salary;
- private BigDecimal commissionPct;
- private Integer managerId;
- private Short departmentId;
- }
3.实践-XML
- <!--List:forech中的collection属性类型是List,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
- <select id="getEmployeesListParams" resultType="Employees">
- select *
- from EMPLOYEES e
- where e.EMPLOYEE_ID in
- <foreach collection="list" item="employeeId" index="index"
- open="(" close=")" separator=",">
- #{employeeId}
- </foreach>
- </select>
- <!--Array:forech中的collection属性类型是array,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
- <select id="getEmployeesArrayParams" resultType="Employees">
- select *
- from EMPLOYEES e
- where e.EMPLOYEE_ID in
- <foreach collection="array" item="employeeId" index="index"
- open="(" close=")" separator=",">
- #{employeeId}
- </foreach>
- </select>
- <!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId -->
- <select id="getEmployeesMapParams" resultType="Employees">
- select *
- from EMPLOYEES e
- <where>
- <if test="departmentId!=null and departmentId!=''">
- e.DEPARTMENT_ID=#{departmentId}
- </if>
- <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
- AND e.EMPLOYEE_ID in
- <foreach collection="employeeIdsArray" item="employeeId"
- index="index" open="(" close=")" separator=",">
- #{employeeId}
- </foreach>
- </if>
- </where>
- </select>
4.实践-Mapper
- public interface EmployeesMapper {
- List<Employees> getEmployeesListParams(List<String> employeeIds);
- List<Employees> getEmployeesArrayParams(String[] employeeIds);
- List<Employees> getEmployeesMapParams(Map<String,Object> params);
- }
[1] zhangqifeng92, MyBatis传入参数为list、数组、map写法, https://blog.csdn.net/s592652578/article/details/52871884
转载于:https://www.cnblogs.com/ryelqy/p/10104070.html
MyBatis传入参数为list、数组、map写法相关推荐
- Mybatis传入参数类型为Map
转载自 Mybatis传入参数类型为Map mybatis更新sql语句: <update id="publishT00_notice" parameterType=&q ...
- Mybatis传入参数类型为ListIntergert作为条件进行查询
Mybatis传入参数类型为List作为条件进行查询 higher2017关注 2017.02.07 10:23:16字数 130阅读 5,658 表结构: 表名称为constant 需求: 现在想查 ...
- mybatis传入参数类型parameterType详解
前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType属性,用于对应的mapper接口方法接受的参数类型. ( res ...
- MyBatis传入参数为0时条件不生效
当传入参数为 0 的时候,判断条件无效 <if test="sex != null and sex != '' ">and sex =#{sex } </if&g ...
- Mybatis传入参数类型不匹配导致的报错:
1.先来看错误异常: com.cfc.common.utils.TranFailException: nested exception is org.apache.ibatis.reflection. ...
- mybatis传入参数为map时如何在mapper.xml中获取
有时在开发中难免会遇到传入的参数为map类型的时候, map的key为数据库中的主键或者其他的唯一字段, value为需要进行插入的值,在mybaits的XML文件中进行遍历取出map参数中的值, 有 ...
- Mybatis传入参数map,读取map原创
如果想输出多张表中的内容或者不是一张表里面的内容(聚集函数),而且又不想resultMap成一个实体,那就用map吧(研究了一下午的成果...) <select id="getUaMa ...
- MyBatis传入参数与parameterType
来自大佬:https://www.cnblogs.com/ruiati/p/6410339.html 1. 传入简单类型 Java代码: Java代码 public User get(Long ...
- mybatis 传入参数及其 foreach collection的三种用法
参考: 既然琴瑟起 https://www.cnblogs.com/qiankun-site/p/5762380.html V青山绿水 http://www.cnblogs.com/ruiati/p ...
最新文章
- java程序发送邮件_用java程序发送邮件
- mysql专区_MySQL-技术专区-详解索引原理
- 网站程序IIS布署问题备忘录
- python 存储图片 alpha_保存时Matplotlib图形面颜色alpha(背景色、透明度)
- ❤️《微服务开发—Swagger》(建议收藏)
- 第五章 线性回归 学习笔记上
- layer数据加载中,loading的显示
- Java基础语法结构
- 柔宇科技奔赴上市为哪般?自称“销售规模较小”,合计亏超30亿
- DCOS(centos 7.4/7.6)
- SOEM 源码解析 ecx_FRMW
- 基于ZigBee技术的无线抄电表系统设计(1)
- 化工人员定位系统提供智能安全保障
- 怎么做到new String(abc) == new String(abc)双等号为true呢?不是使用equals哦
- Ubuntu16.04 Caffe系列 最新更新安装教程 附NVIDIA显卡安装及cuda、cudnn、caffe的安装
- VS Code 配置 C/C++ 环境
- 每天一道笔试题-2012年3月12日
- 天气学原理和方法第四版pdf_天气学原理和方法 汇总很好很全面.pdf
- 程序员用Python编写的抗击疫情代码诗,付中文翻译
- 性能测试总结(performance testing)(一)