背景:SSM 项目 传递多个参数 用注解来简化xml配置的时候, @Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中
关于Mybatis @Param 注解,可以查看其官方文档 其中关于 @param部分的说明是:
使用@Param
因篇幅限制 仅放核心代码
DAO 层 : userDao.java
void updateById(@Param("user_name") String uname, @Param("user_newPass") String u_newPass);
mapper文件 userDao.xml:
<update id="updateById">
update user SET user_pass = #{user_newPass}
WHERE user_name = #{user_name};
</update>
采用 #{} 的方式把@Param注解括号内的参数进行引用
注意:
- @Param 中定义的变量名必须和 mapper 中保持一致才可以
- 当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。
使用javaBean
传递多个参数,不使用 @Param 注解 使用javaBean
DAO 层, userDao.java
// 搜索用户,对结果进行分页
List searchUser(Map<String,Object>);
Service 层 使用DAO,UserService.java
UserInfo userInfo = new UserInfo();
Pagination page = new Pagination();
Map<String,Object> map = new HashMap<>;
map.put("userInfo",userInfo);
pam.put("page",page);
userService.searchUser(map);
mapper文件userDao.xml
<select id="searchUser" parameterType="java.util.Map" resultType="UserInfo">
select *
from t_userinfo user
where 1 =1
<if test="user.uname != null and ''!= user.uname ">
and user.uname like '%${userInfo.uname}$%'
</if>
<if test="page.order != null and page.order == 10" >
order by user.id asc
</if>
limit ${page.pagenum * page.limitnum}, #{page.limitnum}
</select>