1. 程式人生 > >mybatis的動態條件查詢

mybatis的動態條件查詢

如何動態查詢?

當我沒有接觸到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提供了一個有用的標籤解決這個問題,你們可以自己去找下,這裡我就不多說了,交給你們自己去發現了。