这里分别记录使用过的七种传参方式:
1、在入参只有一个的情况下,Mapper.java中直接传即可 例如框架的菜单模块代码
示例:
![]()
2、而在参数有两三个的情况下,Mapper.java中可以用@Param注解来指定入参
程序就知道哪个参对应拼接完SQL的哪个条件字段
示例: 
并且Mapper.xml中parameterType不用去指定,因为使用@Param注解后,MyBatis可以通过类型处理器(TypeHandler) 来推断出具体传入语句的参数
3、在单表查询时,一个实体类就可以满足所有查询条件入参
这是最简单省事的,Mapper.java中直接把实体类丢进去即可
例如系统的字典表模块
示例:

在Mapper.xml中parameterType直接指定为实体类,resultMap指定为实体类的Result即可
![]()
下面是对应实体类的Result
4、然后如果有了简单的表关联,一个实体类可能满足不了所有查询条件入参,可以建一个DTO什么的,继承于实体类,再设置特殊的参数
在Mapper.xml中parameterType直接指定为VO,resultMap指定为实体类的Result即可
5、在复杂的多表关联情况下,可以直接创建一个Model,然后把实体类、DTO、VO都甩进去,提供get、set方法即可
因为在这种情况下,使用一个实体类为入参,属性是不够的,下面是业务类.java
public class 业务Model {
private XxxxxDto xxxxxDto ;
private XxxxxVo xxxxxVo ;
XxxxxDto和XxxxxVo 的get 和set 方法
}
在Mapper.xml中parameterType直接指定为Model,resultType指定为实体类即可
6、 如果在某些多表关联条件下,字段数量不多,但存在于多个实体类,就可以不用创建model,直接把参数塞到List<map>里面即可
下面是示例,入参和返回都是以List<map>的形式

在Mapper.xml中parameterType就可以不指定了,resultType指定为map即可
= #{eid} (全匹配)
like '%${enterpriseName}%' (模糊)
在调用这个方法时,创建map,把值put进去即可
7、 另外,如果SQL遇到需要使用in的情况,这里也可以创建list存in的值,再把这个list作value塞到map里面即可
别的地方都是一样,就是入参赋值时给map.put进去一个List就行了;
然后在Mapper.xml中parameterType依旧不指定,resultType还是为map;
注意这个里面collection的值是前面map.put时候的key值,不要混了
本文详细介绍了在MyBatis中处理不同场景下的传参技巧,包括单一参数、多个参数、关联查询、Map列表等,以及如何在Mapper.xml中正确配置parameterType和resultType。
362

被折叠的 条评论
为什么被折叠?



