mybatis中动态sql的传参要求

本文介绍了MyBatis中如何使用动态SQL来构建灵活的查询条件。重点讲解了serviceImpl层与XML映射文件中参数名称的一致性要求,以及在特定情况下基本类型的参数可以不遵循这一规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis中,可以实现动态sql,在serviceImpl中,传入参数的时候,要注意传入参数的名字和动态sql 中的变量名保持一致。

比如

xml:

<select id="queryStudyList" resultType="java.util.HashMap" parameterType="java.util.HashMap">
      select t.* from SGT_WIS_STUDY_TRAIN t 
      where 1=1
      <if test="datumId != null" >
       	and t.DATUM_ID = #{datumId,jdbcType=VARCHAR}
      </if>
      <if test="datumName != null and datumName != '' " >
       	and t.DATUM_NAME like '%' || #{datumName,jdbcType=VARCHAR} || '%'
      </if>
      <if test="pictureName != null" >
        and t.PICTURE_NAME = #{pictureName,jdbcType=VARCHAR}
      </if>
</select>

代码中所有标红的地方就是动态sql 的变量名,要与下面serviceImpl中的传入的参数名保持一致。

serviceImpl:

public Map<String, Object> queryStudyById(String datumId) {
    	Map<String, Object> paramMap = new HashMap<String, Object>();
    	paramMap.put("datumId", datumId);
    	return (Map<String, Object>) daoHelper.queryOne("com.camel.basic.web.xml.oracle.StudytraMapper.queryStudyList", paramMap);
}

这里面的datumId与动态sql的要一致,大小写也要一致,这里只传了datumId,那么xml的动态sql中其他的就是空,不会执行,运行的sql为:

select t.* from SGT_WIS_STUDY_TRAIN t where 1=1 and t.DATUM_ID = #{datumId}


还有一种特殊情况,如果传入的参数只有一个,并且是基本数据类型,如String,那么sql中的传入参数名可以是_parameter,不用与serviceImpl中的参数名保持一致。如下面代码:

xml:

<delete id="deleteStudyById" parameterType="java.lang.String" >
    delete from SGT_WIS_STUDY_TRAIN t
    where 1=1
    <if test="_parameter != null">
    t.DATUM_ID = #{_parameter,jdbcType=VARCHAR}
    </if>
</delete>

serviceImpl中传入的参数名不需要是_parameter:

public int deleteStudytra(String DATUM_ID) {	
    return daoHelper.delete("com.camel.basic.web.xml.oracle.StudytraMapper.deleteStudyById", DATUM_ID);
}

因为这是mybatis框架做了处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值