在SSM框架中,@Param主要是用来注解dao类中方法的参数,便于在对应的dao.xml文件中引用,如:在userDAO类中有这么一个函数:
public User selectByNameAndPwd(@Param("userName") String name,@Param("Password") String )
在其对应的dao.xml文件中的查询语句则为:
select username,password from user where username=${userName} and password=${Password}
注:在不使用@Param注解的时候,函数的参数只能为一个,并且在查询语句取值时只能用#{},且其所属的类必须为Javabean(实体类),而使用@Param注解则可以使用多个参数,在查询语句中使用时可以使用#{}或者${}
不使用@Param注解
public int getUsersDetail(User user);
<!--这里直接引用对象属性即可,不需要对象.属性的方式-->
<select id="getUserDetail" statementType="CALLABLE" resultMap="baseMap">
Exec WebApi_Get_CustomerList #{userid}
</select>
使用的时候不用在xml中继续使用parameterType=“XXXXXX” 了
在mybaitis的dao层使用。在mybatis中我们常常要使用到多个对象参数,但是在xml中的parameterType往往只能指定一个参数类型。为了解决这个问题,我们可以在dao的接口中使用@param注解,多个参数可以使用多个@param注解。这样就可以将参数传入mybatis的sql语句中了。使用的时候不用在xml中继续使用parameterType=“XXXXXX” 了。
然后讲讲 ${}和#{}
#{},和 ${}传参的区别如下:
使用bai#传入参数是,sql语句解du析是会加上"",当成zhi字符串来解析,这样相比于$的好处是dao比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的
另外一种场景是,如果要做动态的排序,比如 order by column,这个时候务必要用${}
select * from table order by 'name' ,这样是没用
目前来看,能用#就不要用$