一、Param说明
在Java编程中,param是一个常用的关键字,用于表示参数或者参数列表。在方法定义中,param关键字用于声明参数,以便在方法体中使用。本文将介绍Java中param的用法和示例,并通过代码示例说明其具体用法和作用。
param关键字用于在方法定义中声明参数。通过使用param关键字,可以将参数传递给方法,并在方法体中使用。param关键字后面紧跟参数的数据类型和参数名。
二、Mybatis框架Mapper中参数需要@Param映射的几种情况
1.方法有多个参数
mapper接口示例:
List<DeviceGroupVo> listGroup(@Param("parentId") Long parentId, @Param("groupName") String groupName);
xml文件示例:
SELECT * FROM t_script_device_group WHERE parent_id = ${parentId}
2、法参数要取别名,需要@Param
当需要给一个参数取一个别名时,我们也需要@Param注解
mapper接口示例:
User getUserByUsername(@Param("name") String username);
xml文件示例:
<select id="getUserByUsername" resultMap="BaseResultMap" parameterType="String">
SELECT * FROM T_USER WHERE USERNAME = #{name}
</select>
3、xml中的SQL使用了$,需要@Param
虽然$存在SQL注入安全问题,但是有时候确实要使用,比如说传入列名或者表名时,就需要加上@Param注解
mapper接口示例:
List<User> getUsersOrderByParam(@Param("order_by") String order_by);
xml文件示例:
<select id="getUsersOrderByParam" resultMap="BaseResultMap" parameterType="String">
SELECT * FROM T_USER ORDER BY ${order_by} DESC
</select>
4、动态SQL中使用参数作为变量,则需要@Param注解,即使只有一个参数。
这一种是比较特殊的,但是也是容易出错的,如果在动态SQL中使用参数作为判断条件,那么久要加上@Param注解
mapper接口示例:
User getUserById(@Param("id") Integer id);
xml文件示例:
<select id="getUserById" resultMap="BaseResultMap">
SELECT * FROM T_USER WHERE ID = #{id}
</select>
这种情况,即使只有一个参数,也需要添加@Param注解,否则会报错,这种情况也最容易被忽略。
以上四种情况都需要使用@Param注解,参数不多的是有使用@Param注解没有问题,但是当需要传入大量参数,我们一个一个加@Param注解,无形中增加了我们的工作量,下面给出两中解决方法,可以不使用@Param注解。
三、通过配置,不使用@Param注解
1.IDEA配置解决
IDEA配置-parameters参数,settings>Compiler>Java Compiler
这种方法只适合在本地调试,同样的代码给到别人,还是会出错。
2.pom.xml 中进行配置
pom.xml文件中加入如下一段代码:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
这种方式跟上面的方法是是一样的,不过这种方法不用我们特意对idea进行配置,就算别人运行相同的代码,也不会报错