mybatis中sql语句的参数占位符
时间: 2023-07-03 12:07:28 浏览: 176
MyBatis中的SQL语句参数占位符有两种形式:基于#{}的占位符和基于${}的占位符。
1. 基于#{}的占位符
基于#{}的占位符是MyBatis中推荐使用的占位符形式,它可以防止SQL注入攻击,并且支持自动类型转换。在SQL语句中使用#{}时,MyBatis会将#{}替换成一个问号?,然后使用PreparedStatement设置参数值,从而避免了SQL注入攻击。
示例代码:
```xml
<select id="getUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
```
2. 基于${}的占位符
基于${}的占位符是MyBatis中比较常用的占位符形式,它可以将参数直接替换到SQL语句中。但是,使用基于${}的占位符容易引发SQL注入攻击,因为参数值会被直接拼接到SQL语句中,而不会进行任何处理。因此,建议在使用基于${}的占位符时,要进行必要的参数校验和过滤。
示例代码:
```xml
<select id="getUserByName" resultType="User">
SELECT * FROM user WHERE name = '${name}'
</select>
```
相关问题
mybatis的sql语句?占位符替换成int类型的值
MyBatis 的 SQL 语句中可以使用 `#{}` 占位符来表示参数,其中 `#` 用于表示占位符,`{}` 是占位符的取值。如果要将参数替换成 int 类型的值,可以按照以下方式编写 SQL 语句:
```xml
<select id="getUserById" resultType="User">
SELECT * FROM user WHERE id = #{id, jdbcType=INTEGER}
</select>
```
在上面的示例中,`#{id, jdbcType=INTEGER}` 表示将参数 `id` 替换成 int 值,并且在替换时指定了参数的类型为 `INTEGER`。这样 MyBatis 就会将占位符 `#{id}` 替换成一个 int 值。
当然,如果你的程序中传入的参数已经是 int 类型的值,那么你可以直接使用 `#{id}` 占位符来表示参数,MyBatis 会自动将参数转换成对应的 JDBC 类型。
Mybatis中的两种占位符分别
Mybatis中的两种占位符分别是 #{} 和 ${}。
- #{}:表示占位符,可以避免 SQL 注入攻击。在执行 SQL 之前,Mybatis 会将 #{} 中的占位符替换成相应的参数值,然后再将 SQL 语句发送到数据库执行。
- ${}:表示字符串拼接,不安全,容易引起 SQL 注入攻击。在执行 SQL 之前,Mybatis 会将 ${} 中的占位符替换成相应的参数值,最终形成一个完整的 SQL 语句发送到数据库执行。
因此,建议使用 #{},能有效地避免 SQL 注入攻击。
阅读全文