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架構做了處理。