MyBatis之动态SQL、#与$的区别和结果映射
MyBatis 的动态 SQL 是基于 OGNL 表达式的,它可以根据表达式的结果来动态构建 SQL。
#{}
与${}
的区别:#{}
:用于预处理语句(prepared statements),可以防止 SQL 注入,参数会被当作字符串处理。${}
:用于拼接 SQL 语句,不会防止 SQL 注入,参数会直接替换到 SQL 语句中。
结果映射(ResultMap):
- 定义如何映射返回结果集的字段到 Java 对象。
- 可以指定字段映射规则、构造方法映射、一对一关联映射、一对多关联映射。
示例代码:
<!-- ResultMap 示例 -->
<resultMap id="exampleResultMap" type="Example">
<id property="id" column="id" />
<result property="name" column="name" />
<association property="details" javaType="Details">
<id property="id" column="details_id" />
<result property="info" column="details_info" />
</association>
</resultMap>
<!-- 使用动态 SQL 示例 -->
<select id="selectExample" resultMap="exampleResultMap">
SELECT * FROM some_table
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
</where>
</select>
在这个例子中,selectExample
查询会根据传入的 id
和 name
参数动态构建 WHERE 子句。#{}
用于预防 SQL 注入。resultMap
定义了如何将查询结果映射到 Example
对象及其关联的 Details
对象。
评论已关闭