mybatis的動態條件查詢
阿新 • • 發佈:2019-01-24
如何動態查詢?
當我沒有接觸到mybatis的時候一般的條件查詢就是通過後臺來判斷引數分別執行不同的sql語句來得到我們想要的資料(反正我個人是這個樣子的,不知道你們是不是這個樣子啊),從剛開始對著mybatis的使用者手冊開始的時候到後來對動態條件查詢的描述,個人感覺就是在配置檔案中幫你進行動態的拼接sql語句,mybatis提供了很多有用的標籤,比如<if>、<where>、<foreach>等等一系列你可以想到的標籤,接下來我就不寫例項了,直接貼一個配置檔案的動態條件查詢吧(很簡單的一種)
<!-- 2 if(判斷引數) - 將實體類不為空的屬性作為where條件 -->
<select id="getStudentList_if" resultMap="resultMap_studentEntity" parameterType="liming.student.manager.data.model.StudentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
ST.STUDENT_SEX,
ST.STUDENT_BIRTHDAY,
ST.STUDENT_PHOTO,
ST.CLASS _ID,
ST.PLACE_ID
FROM STUDENT_TBL ST
WHERE
<if test="studentName !=null ">
ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')
</if>
<if test="studentSex != null and studentSex != '' " >
AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
</if>
<if test="studentBirthday != null ">
AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
</if>
<if test="classId != null and classId!= '' ">
AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR}
</if>
<if test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' ">
AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR}
</if>
<if test="placeId != null and placeId != '' ">
AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR}
</if>
<if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' ">
AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}
</if>
<if test="studentId != null and studentId != '' ">
AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR}
</if>
</select>
註解:其實上面的動態條件查詢的配置檔案還是有點問題的,比如說studentName 的值為空的時候動態拼接的sql語句就是where and 連在一起了對不對,這個時候拼接出來的sql語句就會有錯誤了,那麼這個時候應該怎麼辦呢?
其實很簡單,mybatis提供了一個有用的標籤解決這個問題,你們可以自己去找下,這裡我就不多說了,交給你們自己去發現了。