Mybatis:mapper接口中的@Param注解的用法总结

Mybatis:mapper接口中的@Param注解的用法总结

目录

@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 getAllUser(@Param("user") User u);

映射到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 getUsersOrderByParam(@Param("order_by") String order_by);

映射到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 selectUserById(User user);

#Mapper.xml写法

不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。该例子中,未使用param注解,因此,若用xml格式(本文未写出来xml格式)在sql中使用#{id}的方式获取传入的该参数会报错个人建议使用param注解,较方便。

注意点

当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。只不过${}取值会遭受网络攻击,造成信息泄露,推荐使用#{} 当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。 不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。

相关推荐

麦芽贷放款一般要多久 麦芽贷授信额度怎么提升?
Bet体育365app下载

麦芽贷放款一般要多久 麦芽贷授信额度怎么提升?

📅 08-05 👀 9751
奇爸讲字源:臽与舀(2)
365bet下注网站

奇爸讲字源:臽与舀(2)

📅 08-24 👀 3027
召喚惡魔,我既是深淵
Bet体育365app下载

召喚惡魔,我既是深淵

📅 08-05 👀 9964