mybatis传参问题总结
一、 传入单个参数
当传入的是单个参数时,方法中的参数名和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就会报错
mybatis传参问题总结的更多相关文章
- 问题小记(MyBatis传参出现的小问题)
问题一:在MyBatis中注解@Param和ParameterType不能一起用,会报错Parameter 'XXX' not found. Available parameters are [1, ...
- Mybatis传参方式
Mybatis传多个参数(三种解决方案) 据我目前接触到的传多个参数的方案有三种. 第一种方案 DAO层的函数方法 ? 1 Public User selectUser(String name,St ...
- mybatis传参的几种方式
1,@Param @参考文章 @Select("select s_id id,s_name name,class_id classid from student where s_name= ...
- Java Mybatis 传参方式
一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...
- mybatis 传参是 list<string> 的注意事项
<!--付款 批量 修改账单状态--><update id="editbillpayALL" parameterType="java.util.List ...
- mybatis传参总结
注:文章引用部分 mybatis传递参数总结文章内容 一.单个参数 1.基本数据类型 (1)直接使用 List<ChargeRuleDO> tests(long id); <sele ...
- php sql 类似 mybatis 传参
PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便, 楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装sql 的 ...
- Mybatis传参- 被逗号分割的字符串
String ids = "1,2,3,4,5,6",如ids作为参数传递,查询list返回.mybatis用foreach处理并返回. SELECT * FROM yp_popu ...
- mybatis 传参为 Integer 时 ,Mapper 文件 中判断 条件 问题。
<if test="valiStatus==null || valiStatus=='' || valiStatus==4 "> b.work_permit_card_ ...
随机推荐
- svn汉化包安装无效的解决办法
下载svn汉化包要和对应的svn客户端版本对应,否则安装无效, 在安装前要想将svn安装目录下的languages目录下的文件全部删除 还有一点要注意的是 汉化包安装要放在svn安装目录下进行安装,它 ...
- 一:安装centos 7最小编程环境 xfce桌面
1, u盘制作安装盘------------------------------------------------------安装时, table或者e进入编辑选项 如果不知道你的u盘的盘符 ...
- Python进阶-打包程序为exe
操作系统:win7 x64 运行环境:Python3.5 安装PyInstaller 第一步:下载PyInstaller https://github.com/pyinstaller/pyinstal ...
- javaHttp请求,接收到的是中文乱码如何处理
可在service()方法中加日志,看哪种不是乱码 例如,中文乱码的话,中文编码一般有 UTF-8,GBK,ISO-8859-1 加日志为 List<String> list = new ...
- Codeforces 158B (数学)
B. Mushroom Scientists time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- codevs 1296 营业额统计 (splay 点操作)
题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值. 答案输出所有相差值的总和. 解题分析 = = 参考程序 #include <bits/stdc++.h> using ...
- Choose and divide
The binomial coefficient C(m, n) is defined as C(m, n) = m! (m − n)! n! Given four natural numbers p ...
- Ubuntu 16.04安装NASM汇编IDE-SASM
在Linux下,尤其是Ubuntu,SASM工具应该是用来开发汇编最好用的IDE,小巧且支持调试.支持的编译器有:NASM, MASM, GAS, FASM. 安装步骤: 下载: http://dow ...
- Android学习路线(十八)支持不同设备——支持不同的屏幕
Android系统使用两个普通属性:尺寸和密度,来对设备屏幕进行分类. 你须要先预測你的应用将会在什么样屏幕的设备上安装,包含屏幕尺寸和密度.这种话,你就须要提供一些可选的资源类让你的应用在不同屏幕的 ...
- CN Internet
来自为知笔记(Wiz)