目录
Mybatis给映射器传递多个参数分为以下三种方法。
select user_name from tbl_user_infobymy where user_id in #{id}
dao层接口使用map作为入参
UserInfo getUserByMy(Map params);
调用dao层接口
Map map = HashMap();String[] ids = {"12345", "12346"};map.put("ids", ids);getUserByMy();
使用 MyBatis 的注解 @Param() 传递参数
dao层接口使用map作为入参;
UserInfo getUserByMy(@Param("params")Map map);
把参数传递给后台时,MyBatis 通过 @Param 提供的名称就会知道 #{name} 代表 name 参数,提高了参数可读性。
在参数过多的情况下,MyBatis 允许组织一个 JavaBean;
int updateByPrimaryKey(UserInfo record);
update tbl_user_infobymy set user_name = #{userName,jdbcType=VARCHAR}, user_psd = #{userPsd,jdbcType=VARCHAR} where user_id = #{userId,jdbcType=INTEGER}
userName,userPsd,userId对应JavaBean实体类UserInfo的属性值;
使用#{}方式:
#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
#方式能够很大程度防止sql注入,相当于使用PreparedStatement方式
使用${}方式:
${}将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
$方式无法防止SQL注入,如在登录查询用户时,若使用${}方式传参,当密码为upass='' or 1=1时,密码是任意字符时,返回的结果都为true;
select * from user where uname='user1' and upass='' or 1=1;
来源地址:https://blog.csdn.net/weixin_43631436/article/details/127711647