MyBatis动态取参的使用

在MyBatis中获取参数值主要有以下几种方式,并分别给出示例:

  1. 通过#{paramName}传递参数(占位符方式)

@Param 既可以是特定的数据类型或者包装类型,也可以是某个对象。如果是对象 就需要 对象名.属性名

// Mapper接口方法定义
public interface UserMapper {
    User selectUserById(@Param("id") int id);
}

// Mapper XML配置文件中的SQL
<select id="selectUserById" resultType="com.example.User">
    SELECT * FROM users WHERE id = #{id}
</select>

// Service层调用
User user = userMapper.selectUserById(123);
  1. **通过#{paramName}占位符方式
public interface UserMapper {
    void updateUsername(@Param("id") Long id ,@Param("username") String newUsername);
}

// Mapper XML配置文件中的SQL
<update id="updateUsername">
    UPDATE users SET username = '#{username}' where id = #{id}
</update>

// Service层调用
userMapper.updateUsername(1L,"liwei");
  1. **通过 ${paramName} 字符串拼接方式,慎用

(注意:这种写法实际上是错误的,这里仅作区分说明)传递参数(字符串拼接方式,慎用,易导致SQL注入)**

${paramName}会将变量直接拼接到SQL语句中,这种方式不会防范SQL注入,所以不推荐用于接受外部输入或不可信数据的地方。
当确实需要使用原始字符串拼接,例如在SQL片段中构建动态SQL时,可以使用${paramName},但必须确保安全性,否则容易遭受SQL注入攻击。

  1. 通过Map传递多个参数
// Mapper接口方法定义
public interface UserMapper {
    User selectUser(Map<String, Object> params);
}

// Mapper XML配置文件中的SQL
<select id="selectUser" resultType="com.example.User">
    SELECT * FROM users 
    WHERE id = #{params.id} 
    AND username LIKE CONCAT('%', #{params.username}, '%')
</select>

// Service层调用
Map<String, Object> params = new HashMap<>();
params.put("id", 1);
params.put("username", "John");
User user = userMapper.selectUser(params);
  1. 通过JavaBean实体类传递参数
// User实体类
public class User {
    private int id;
    private String username;
    // getters and setters...
}

// Mapper接口方法定义
public interface UserMapper {
    User selectUser(User user);
}

// Mapper XML配置文件中的SQL
<select id="selectUser" resultType="com.example.User">
    SELECT * FROM users WHERE id = #{id} AND username = #{username}
</select>

// Service层调用
User condition = new User();
condition.setId(1);
condition.setUsername("John");
User user = userMapper.selectUser(condition);

注意:在实际开发中强烈推荐使用#{paramName}占位符方式传递参数,因为它能防止SQL注入,并且MyBatis会负责类型转换。
实际使用中要么是#{}要么是${}.
但如前所述, ${}方式存在安全隐患,一般不建议使用。

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值