在 MyBatis(动态 SQL) 中,传参数有多种方式,常见如下:
User selectById(Integer id);
<select id="selectById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
✅ 参数名任意(推荐与 #{} 一致)
List<User> selectByCondition(
@Param("name") String name,
@Param("age") Integer age);
<select id="selectByCondition">
SELECT * FROM user
WHERE name = #{name}
AND age = #{age}
</select>
User selectByUser(User user);
<select id="selectByUser">
SELECT * FROM user
WHERE name = #{name}
AND age = #{age}
</select>
✅ 直接写对象属性名
Map<String, Object> map = new HashMap<>();
map.put("name", "Tom");
map.put("age", 18);
<select id="selectByMap">
SELECT * FROM user
WHERE name = #{name}
AND age = #{age}
</select>
<select id="selectUser">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
List<User> selectByIds(@Param("ids") List<Integer> ids);
<select id="selectByIds">
SELECT * FROM user
WHERE id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
| 写法 | 说明 |
|---|---|
#{} |
预编译(安全,防 SQL 注入)✅ |
${} |
字符串拼接(有注入风险)⚠️ |
❌ 不推荐:
ORDER BY ${column}
✅ 仅用于表名 / 列名动态
✅ 基本参数 → 直接 #{}
✅ 多参数 → @Param
✅ 复杂条件 → 对象 / Map
✅ 动态 SQL → if / choose / foreach
如果你用的是 Spring Boot / MyBatis-Plus / XML / 注解,可以告诉我,我可以给你更具体的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。