一、 传入单个参数
当传入的是单个参数时,方法中的参数名和sql语句中参数名一致即可

List<User> getUser(int id);<select id="getUser" parameterType="java.lang.Integer"  resultType="com.lee.test.pojo.User">select * from t_user where id = #{id}
</select>

二、传入的是多个参数
1、当传入的是多个参数时,可以通过#{argindex}来对应参数,索引从0开始,其中sql语句中的参数顺序与方法中的参数顺序一致

List<User> getUser(int id, String name);<select id="getUser"  resultType="com.lee.test.pojo.User">select * from t_user where id = #{arg0} and name =#{arg1}
</select>

2、使用@Param注解来指定对应的参数,其中@param中的参数与sql语句中的参数名一致

List<User> getUser(@param("id")int id, @param("name")String name);<select id="getUser"  resultType="com.lee.test.pojo.User">select * from t_user where id = #{id} and name =#{name}
</select>

3、使用map封装多个参数,其中map中的key和sql语句中的参数名一致

List<User> getUser(HashMap map);<select id="getUser" parameterType="hashMap" resultType="com.lee.test.pojo.User">select * from t_user where id = #{id} and name =#{name}
</select>

三、传入的参数是一个实体类
当传入的是一个实体类,mybatis会根据实体类中字段自动与sql中参数关联

List<User> getUser(User user);<select id="getUser" parameterType="com.lee.test.pojo.User" resultType="com.lee.test.pojo.User">select * from t_user where id = #{id} and name =#{name}
</select>

四、当传入的参数包含了数组
如果传入的参数中包括了数组,可以使用mybatis中动态sql的foreach标签
标签属性说明:
(1)collection :collection属性对应有三种,list,array和map
(2)item : 在迭代每一个元素时起的别名,与#{}参数名一致
(3)index :这个属性用来指定用来访问迭代集合下标的名称。如:index="myIndex",则#{myIndex}用来访问当前迭代的下标,下标从0开始。
(4)open :拼接字符串的前缀,如"("
(5)close :拼接字符串的后缀,如")"
(6)separator :分隔符,表示迭代时每个元素之间的分隔符号,如","

1、如果传入的是一个list

List<User> getUser(List<Integer> ids);<select id="getUser" resultType="com.lee.test.pojo.User">select * from t_user where id in<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">#{id}</foreach></select>

如果传入的list ids为1,2,3
这句sql语句相当于 select * from t_user where id in (1,2,3)

2、如果传入的是一个array

List<User> getUser(int[] ids);<select id="getUser" resultType="com.lee.test.pojo.User">select * from t_user where id in<foreach collection="array" item="id" index="index" open="(" close=")" separator=",">#{id}</foreach></select>

如果传入的int[] ids为1,2,3
这句sql语句相当于 select * from t_user where id in (1,2,3)

3、如果传入的是一个map
在开发过程中会遇到既要传入一个String,又要传入一个list,这时我们就可以把把这个String和list封装成一个map

//定义一个list
List ids = new ArrayList();
ids.add(1);
ids.add(2);
ids.add(3);
//将list和string放到map
HashMap map = new HashMap();
map.put("name", name);
map.put("ids", ids);//mapper.java
List<User> getUser(HashMap map);//mapper.xml
<select id="getUser" parameterType="java.util.HashMap" resultType="com.lee.test.pojo.User">select * from t_user where name = #{name} and id in<foreach collection="ids" item="id" index="index" open="(" close=")" separator=",">#{id}</foreach>
</select>

这里collection的值是map中list的key值,如果直接写list或者array就会报错

转载于:https://www.cnblogs.com/leexboo/p/10480955.html

mybatis传参问题总结相关推荐

  1. mybatis传入数组怎么写_推荐的MyBatis传参方式List、数组等

    MyBatis 推荐的传参方式 如果要详细的学习 MyBatis,推荐看这个教程:https://www.w3cschool.cn/mybatis/ 1. 单个参数//接口方法int getAgeBy ...

  2. mybatis 传参是 liststring 的注意事项

    <!--付款 批量 修改账单状态--><update id="editbillpayALL" parameterType="java.util.List ...

  3. mybatis传参为map的写法

    接口方法是这样的 XxlJobInfo getInfoByParameters(@Param("param") Map<String, String> param); ...

  4. mybatis java传参_[Java教程]Mybatis批量和传参

    [Java教程]Mybatis批量和传参 0 2014-07-31 04:00:12 MyBatis中批量插入 方法一: resultType="java.lang.String" ...

  5. mybatis中#{}和${}传参的区别

    最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别,  使用#传入参数是,sql语句解析是会加上"&qu ...

  6. MyBatis框架 传参、事务、缓存(二级)

    传参 在mapper.xml文件中的标签中的parameterType可以可控制参数 传入参数的方法: sSession.select("虚拟包.id", 参数列表); SQL语句 ...

  7. MyBatis复习(四):#{}占位符与SQL传参

    参数类型 1. MyBatis的parameterType参数类型可以是基本数据类型.String.包装类型.java.util.Map.java.util.LinkHashMapd等 ${}和#{} ...

  8. mybatis的mapper接口与xml传参问题

    本文来说下mybatis的mapper接口与xml传参问题 文章目录 单个基础数据类型的传参 多个基础数据类型的传参 单个javabean 多个javabean 单个基础数据类型的传参 也就是说,接口 ...

  9. MyBatis获取参数值的两种方式以及传参情况

    MyBatis获取参数值的两种方式 MyBatis获取参数值的两种方式:${}和#{} 传参情况 演示环境 1.单个字面量类型的参数 2.多个字面量类型的参数 3.map集合类型的参数 4.实体类类型 ...

最新文章

  1. 异步请求时有时会让js不起作用,那么重新加载js
  2. Java Web(5) Spring 下使用Junit4 单元测试
  3. MySQL中地理位置数据扩展geometry的使用心得
  4. C++利用双哈希表实现存储机制hash table的算法(附完整源码)
  5. LmgORM项目: 介绍
  6. [转]VI/VIM的键盘图
  7. expect学习笔记及实例详解【转】
  8. pymysql使用变化的变量,构造SQL语句
  9. 您的用户账户没有连接到http://192.168.0.112:8080/tfs上的team foundation server的权限
  10. 改善C#程序的建议9:使用Task代替ThreadPool和Thread
  11. vscode 字体颜色变得花里胡哨的
  12. [IDEA]项目web文件夹找不到
  13. WPF_界面_图片/界面/文字模糊解决之道整理
  14. 用Mysql得到Webshell(MySql Backup WebShell)
  15. sqlite3设置密码 password
  16. RTFM:Weakly-supervised Video Anomaly Detection with Robust Temporal Feature【ICCV 2021】附代码注释
  17. MATLAB基本的使用方法
  18. Android签名aab文件
  19. 抗乙型肝炎表面抗原(HBsAg)抗体偶联镉硒(CdSe)量子点|羧基水溶性量子点(PEG)标记EBNA1抗原
  20. 清华计算机2020保研,清华大学2020届保研情况

热门文章

  1. hibernate的多表查询
  2. 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
  3. 枚举转中文,通过反射方法与描述的方式获取
  4. 华中地区高校第七届ACM程序设计大赛——之字形矩阵【2012年5月27日】
  5. UVA 10404 - Bachet's Game
  6. 如何提高VFP应用软件的路径适应性
  7. linux 下mysql等php的安装 lnmp
  8. 文本二叉树折半查询及其截取值
  9. ROS project part 1: Ubuntu中安装opencv包以及相应的依赖
  10. Linux 4.1内核热补丁成功实践