Mybatis中传递多个参数的方法总结

一、单个参数:

1public List<XXBean> getXXBeanList(String xxCode); 2 3<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"> 4 5  select t.* from tableName t where t.id= #{id} 6 7</select> 8 9其中方法名和ID一致,#{}中的参数名与方法中的参数名一直, 我这里采用的是XXXBean是采用的短名字, 10 11select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充。二、多参数: 12 13public List<XXXBean> getXXXBeanList(String xxId, String xxCode); 14 15<select id="getXXXBeanList" resultType="XXBean"> 16 17  select t.* from tableName where id = #{0} and name = #{1} 18 19</select> #{}里面的数字代表你传入参数的顺序。 20 21由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始@Param注解传参法 22 23public AddrInfo getAddrInfo(@Param("corpId")int corpId, @Param("addrId")int addrId); 24 25xml配置这样写: 26 27<select id="getAddrInfo" resultMap="com.xxx.xxx.AddrInfo"> 28 SELECT * FROM addr__info     where addr_id=#{addrId} and corp_id=#{corpId} 29</select> 30 31以前在<select>语句中要带parameterType的,现在可以不要这样写。 32 33三、Map封装多参数: 34 35public List<XXXBean> getXXXBeanList(HashMap map); 36 37<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean"> 38 39  select 字段... from XXX where id=#{xxId} code = #{xxCode} 40 41</select>

****四、Java Bean传参法

#{}里面的名称对应的是 User类里面的成员属性。

这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。

五、JSONObject参数

1<select id="listSelective" parameterType="com.alibaba.fastjson.JSONObject" resultType="com.alibaba.fastjson.JSONObject"> SELECT c.* FROM car AS c WHERE 1=1 <if test="id != null and id != ''"> and c.id= #{id} 2 3</select> 4 5Mapper: 6 7List<JSONObject> listSelective(JSONObject params);

六、List封装in:

1public List<XXXBean> getXXXBeanList(List<String> list); 2 3<select id="getXXXBeanList" resultType="XXBean"> 4  select 字段... from XXX where id in 5  <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> 6    #{item} 7  </foreach> 8</select> 9 10foreach 最后的效果是select 字段... from XXX where id in ('1','2','3','4') 11

简单来说是以下规则:

1、如果传递过来是单参数,且没有以@Param注解进行命名,则直接将单参数作为真实的参数调用SqlSession的对应方法。

2、如果传递过来的不是单参数或者是包含以@Param注解进行命名的参数,则会将对应的参数转换为一个Map进行传递。具体规则如下:

      2.1、 会把对应的参数按照顺序以param1、param2、paramN这样的形式作为Key存入目标Map中,第一个参数是param1,第N个参数是paramN。

      2.2、 如果参数是以@Param注解命名的参数,则以@Param指定的名称作为Key存入目标Map中。

      2.3、 如果参数不是以@Param注解命名的,则按照顺序以0、1、N这样的形式作为Key存入目标Map中,第一个参数是0,第N个参数是N。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Mybatis中传递多个参数的方法总结 - HelloWorld