目录
@param使用与否的区别
不使用@param:
使用@param:
使用@param实例
实例一:@Param注解基本类型的参数(有多个参数)
实例二:@Param注解JavaBean对象
(参数为对象:SQL语句需要使用“对象.字段”的形式获取对象的字段值)
实例三:方法参数要取别名,需要@Param
实例四:xml中的SQL使用了$,需要@Param
实例五:动态SQL中使用参数作为变量,则需要@Param注解,即使只有一个参数。
不使用@param实例
注意点
@param使用与否的区别
不使用@param:
只能有一个参数该参数只能为Javabean类型(即参数只能是对象)sql语句只能使用 # 获取参数值在SQL语句中,可以直接获取对象的字段,而不需要使用“对象.字段”的形式(这样使用反而会报错)
使用@param:
可以有多个参数参数类型没有限制sql语句可以使用 # 或者 $ 获取参数值若参数为对象,在SQL语句中,需要使用“对象.字段”的形式获取对象的字段值
使用@param实例
实例一:@Param注解基本类型的参数(有多个参数)
mapper中的方法:
public User selectUser(@Param("userName") String name,@Param("password") String pwd);
映射到xml中的
select * from user where user_name = #{userName} and user_password=#{password}
其中where user_name = #{userName} and user_password = #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。
实例二:@Param注解JavaBean对象
(参数为对象:SQL语句需要使用“对象.字段”的形式获取对象的字段值)
SQL语句通过@Param注解中的别名把对象中的属性取出来然后复制
mapper中的方法:
public List
映射到xml中的
select
from user t where 1=1
and t.user_name = #{user.userName}
and t.user_age = #{user.userAge}
实例三:方法参数要取别名,需要@Param
当需要给一个参数取一个别名时,我们也需要@Param注解,例如:
mapper中的方法:
User getUserByUsername(@Param("name") String username);
映射到xml中的
SELECT * FROM T_USER WHERE USERNAME = #{name}
实例四:xml中的SQL使用了$,需要@Param
虽然$存在SQL注入安全问题,但是有时候确实要使用,比如说传入列名或者表名时,就需要加上@Param注解,例如:
mapper中的方法:
List
映射到xml中的
SELECT * FROM T_USER
ORDER BY ${order_by} DESC
实例五:动态SQL中使用参数作为变量,则需要@Param注解,即使只有一个参数。
这一种是比较特殊的,但是也是容易出错的,如果在动态SQL中使用参数作为判断条件,那么久要加上@Param注解,例如:
mapper中的方法:
User getUserById(@Param("id") Integer id);
映射到xml中的
SELECT * FROM T_USER
ID = #{id}
不使用@param实例
mapper中的方法: (两种写法)
#注解写法
#注解
@Select("SELECT * from Table where id = #{id}")
list
#Mapper.xml写法
不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。该例子中,未使用param注解,因此,若用xml格式(本文未写出来xml格式)在sql中使用#{id}的方式获取传入的该参数会报错个人建议使用param注解,较方便。
注意点
当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。只不过${}取值会遭受网络攻击,造成信息泄露,推荐使用#{} 当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。 不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。