原先mapper中的sql是
<select id="queryByModelId" resultType="java.util.Map">
select * from ldp_analy_model_select
WHERE
<if test="modelId != null">
model_id = #{modelId}
</if>
<if test="fieldType != null">
and field_type = #{fieldType}
</if>
</select>
如果这些条件没有一个能匹配上将会怎样?最终这条 SQL 会变成这样:select * from ldp_analy_model_select WHERE
这会导致查询失败。如果仅仅第二个条件匹配又会怎样?这条 SQL 最终会是这样: select * from ldp_analy_model_select WHERE AND field_type = #{fieldType}
最终的sql语句为
<select id="queryByModelId" resultType="java.util.Map">
select * from ldp_analy_model_select
<trim prefix="where" prefixOverrides="and|or">
<if test="modelId != null">
and model_id = #{modelId}
</if>
<if test="fieldType != null">
and field_type = #{fieldType}
</if>
</trim>
</select>
引用 https://www.cnblogs.com/caoyc/p/5574966.html https://www.cnblogs.com/qiankun-site/p/5758924.html
当mybatis使用查询时 使用传入的参数为map时 应当如何解决
<select id="queryMyApplyList" parameterType="java.util.Map"
resultMap="BaseResultMap">
SELECT id,apply_name,start_time,expire_time,`status`,update_time,
(select `name` from ldp_sys_user where id = create_by ) create_name
FROM `ldp_mgmt_apply` where create_by = ${userId}
<if test="status != null and status != ''">
and status = ${status}
</if>
<if test="KeyWord != null and KeyWord != ''">
and apply_name like '%${KeyWord}%'
</if>
order by update_time desc
</select>
当mapper文件方法中的参数只有一个时,是默认填充的 比如
/**
* 根据ID查询
* @param applyId
* @return
*/
public ApplyBean queryApplyById(Integer applyId);
<select id="queryApplyById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
select <include refid="Base_Column_List" /> from ldp_mgmt_apply
where id = #{id,jdbcType=INTEGER}
</select>
这样也可以查出来的 将applyId的值赋给id 可直接填充