如何在MyBatis中传递多个参数

  介绍

这篇文章将为大家详细讲解有关如何在MyBatis中传递多个参数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。


我们在使用MyBatis接口和xml对应的时候,常常是这样写的:

<强>接口

public  interface  DogDao  {   ,void 保存(@Param (“dogName"), String  dogName,, @Param (“age") int 年龄);   }

<强> xml

, & lt; insert  id=皊ave"比;   INSERT 才能;INTO 狗   values 才能;(null,, # {dogName},, #{时代});   ,& lt;/insert>

因为mybatis在执行的之后动态生成实现类,而在java中使用反射会将方法中的参数名称擦除,所以如果在xml中要接收到规定参数名称的参数,通过注解标识是简单又可行的方法,一方面可以自定义方法参数的绑定,另外一方面在xml中也可以起有意义的名称与@Param中对的价值应。

如果不加@Param注解,也想用xml接收响应的参数

public  interface  DogDao  {   ,void 保存(Integer  id, String  dogName,, int 年龄);   }

由于在反射和jdk动态代理会将方法名称抹除,所以在解析参数的时候不能像上面的xml # {dogName}这样接收,会将参数的名称序列化成以下方式,param1…paramn

如何在MyBatis中传递多个参数

所以在xml中我们要用以下方式来接收:

, & lt; insert  id=皊ave"比;   INSERT 才能;INTO 狗   values 才能;(null,, # {param2},, # {param2});   ,& lt;/insert>

不想用@Param修饰,但是希望在xml中用方法中的原参数名称接收

我们在jdk不能使用反射获取参数名称,但是在jdk1.8之后提供了参数这个反射类,可以配置参数这个参数到javac编译器上,可以用来获取方法参数上的名称,但是javac编译器默认是关闭的,所以我们在编译代码的时候应该打开它,我们用maven插件的方式开启

在:pom文件中加入以下插件:

& lt; plugin>   ,& lt; groupId> org.apache.maven.plugins   ,& lt; artifactId> maven-compiler-plugin   ,& lt; version> 3.8.0   ,& lt; configuration>   & lt;才能compilerArgument> -parameters</compilerArgument>   & lt;才能encoding> UTF-8</encoding>   ,& lt;/configuration>   & lt;/plugin>

这样,javac编译器就能将方法的参数在反射编译的时候一同传递了,我们也不用借助注解就能达到在xml中获取方法中的实际参数的名称,除了加入编译插件,还要加入mybatis的配置开启:

& lt; settings>   ,& lt; setting  name=皍seActualParamName" https://www.yisu.com/zixun/, value=" false "/>   

官方文档是这样对这个配置说明的:

允许使用方法签名中的名称作为语句参数名称。为了使用该特性,你的项目必须采用Java 8编译,并且加上参数选项。(新增于3.4.1)

Java代码:

public  interface  DogDao  {   ,void 保存(Integer  id, String  dogName,, int 年龄);   }

xml代码:

, & lt; insert  id=皊ave"比;   INSERT 才能;INTO 狗   values 才能;(null,, # {dogName},, #{时代});   ,& lt;/insert>

<强>补充:mybatis传多个参数(不使用@param注解情况和使用@param注解的情况)

方法1:顺序传参法

1。不使用@param注解传递多个参数的情况

注:使用jdk1.7得到的是:[1 0 param1 param2]

使用1.8得到的则是:[__arg1、arg0, param1 param2]

#{}里面的数字代表你传入参数的顺序。

这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

举个栗子:Dao层

List,演示(int  userid, String 名称),

对应的XML编写

<强> jdk1.7

& lt; select  id=癲emo", resultMap=癠ser"比;   select  *   ,得到user  where  user_id=#{0},以及name=, # {1}   ,& lt;/select>

<强> jdk1.8之后

第一种写法

& lt; select  id=癲emo", resultMap=癠ser"比;   select  *   ,得到user  where  user_id=# {arg0},以及name=, # {__arg1}   ,& lt;/select>

第二种写法

& lt; select  id=癲emo", resultMap=癠ser"比;   select  *   ,得到user  where  user_id=# {param0},以及name=, # {param1}   ,& lt;/select>

如何在MyBatis中传递多个参数