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_ ...
随机推荐
- C++STL快速入门学习
C++ STL中最基本以及最常用的类或容器无非就是以下几个: string vector set list map 下面就依次介绍一下它们,并给出一些最常见的使用方法,做到最快入门. string 首 ...
- java 日历计算农历和节假日的工具类
背景 业务需求需要后端提供这样的接口,网上找了很多java代码例子,虽然功能实现了 但是不完善,特别是节日那一块儿.然后百度发现有这样的插件,但是信息也是java后端提供的非js 然后在开源js插件找 ...
- Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError解决
场景:将Eclipse的可以运行的项目转到IDEA发现一个奇怪的错误 今天用IDEA2018.1运行SpringBoot项目报错如下: Error:java: Internal compiler er ...
- 回文质数 USACO
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 15 ...
- IBOutlet loadView UIButton的subview数量 UIWebView
IBOutlet声明的插座变量和属性一起使用的时候,在.m文件调用的是属性. 在loadView方法中获取view属性会产生循环引用问题并导致内存溢出. Control+E到行尾,Control+A到 ...
- RabbitMQ消息队列阻塞导致服务器宕机
最近工作中存储服务器由于压力太大无法及时消费消息.这个过程中,导致RabbitMQ意外挂掉,无法访问.下面是部分问题分析过程. 麒麟系统服务器分析 1.服务器异常信息: [root@localhost ...
- Java设计模式补充:回调模式、事件监听器模式、观察者模式(转)
一.回调函数 为什么首先会讲回调函数呢?因为这个是理解监听器.观察者模式的关键. 什么是回调函数 所谓的回调,用于回调的函数. 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数. ...
- 22、Java并发性和多线程-Java中的读/写锁
以下内容转自http://ifeve.com/read-write-locks/: 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些.假设你的程序中涉及到对一些共享资源 ...
- C/C++ Threads): Creating worker threads that will be listening to jobs and executing them concurrently when wanted
Suppose we have two workers. Each worker has an id of 0 and 1. Also suppose that we have jobs arrivi ...
- 第5章 Cisco测试命令和TCP/IP连接故障处理
第5章 Cisco测试命令和TCP/IP连接故障处理 一.故障处理命令 1.show命令: 1) 全局命令: show version :显示系统硬件和软件版本.DRAM.Flash show sta ...