MyBatis之动态SQL、#与$的区别和结果映射
    		       		warning:
    		            这篇文章距离上次修改已过428天,其中的内容可能已经有所变动。
    		        
        		                
                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 对象。
评论已关闭