mybatis動態SQL語句

一 if標籤javascript

<select id=" getStudentListLikeName " parameterType="StudentEntity" resultMap="studentResultMap">  SELECT * from STUDENT_TBL ST  <if test="studentName!=null and studentName!='' ">   WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')  </if> </select>

二 where標籤php

<select id="getStudentListWhere" parameterType="StudentEntity" resultMap="studentResultMap">  SELECT * from STUDENT_TBL ST  <where>   <if test="studentName!=null and studentName!='' ">    ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')   </if>   <if test="studentSex!= null and studentSex!= '' ">    AND ST.STUDENT_SEX = #{studentSex}   </if>  </where> </select>

若是它包含的標籤中有返回值的話就插入一個where。此外若是標籤返回的內容是以AND或OR開頭的,則它會剔除掉。java

三 set 標籤sql

使用set+if標籤修改後,若是某項爲null則不進行更新,而是保持數據庫原值數據庫

<update id="updateStudent" parameterType="StudentEntity">  UPDATE STUDENT_TBL  <set>   <if test="studentName!=null and studentName!='' ">    STUDENT_TBL.STUDENT_NAME = #{studentName},   </if>   <if test="studentSex!=null and studentSex!='' ">    STUDENT_TBL.STUDENT_SEX = #{studentSex},   </if>   <if test="studentBirthday!=null ">    STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},   </if>   <if test="classEntity!=null and classEntity.classID!=null and classEntity.classID!='' ">    STUDENT_TBL.CLASS_ID = #{classEntity.classID}   </if>  </set>  WHERE STUDENT_TBL.STUDENT_ID = #{studentID}; </update>

四 trim標籤數組

trim是更靈活的去處多餘關鍵字的標籤,他能夠實踐where和set的效果,where例子的等效trim語句bash

<select id="getStudentListWhere" parameterType="StudentEntity" resultMap="studentResultMap">  SELECT * from STUDENT_TBL ST  <trim prefix="WHERE" prefixOverrides="AND|OR">   <if test="studentName!=null and studentName!='' ">    ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')   </if>   <if test="studentSex!= null and studentSex!= '' ">    AND ST.STUDENT_SEX = #{studentSex}   </if>  </trim> </select>

set例子的等效trim語句app

<update id="updateStudent" parameterType="StudentEntity">  UPDATE STUDENT_TBL  <trim prefix="SET" suffixOverrides=",">   <if test="studentName!=null and studentName!='' ">    STUDENT_TBL.STUDENT_NAME = #{studentName},   </if>   <if test="studentSex!=null and studentSex!='' ">    STUDENT_TBL.STUDENT_SEX = #{studentSex},   </if>   <if test="studentBirthday!=null ">    STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},   </if>   <if test="classEntity!=null and classEntity.classID!=null and classEntity.classID!='' ">    STUDENT_TBL.CLASS_ID = #{classEntity.classID}   </if>  </trim>  WHERE STUDENT_TBL.STUDENT_ID = #{studentID}; </update>

五 choose (when, otherwise)ide

有時候並不想應用全部的條件,而只是想從多個選項中選擇一個。MyBatis提供了choose 元素,按順序判斷when中的條件出否成立,若是有一個成立,則choose結束。當choose中全部when的條件都不滿則時,則執行otherwise中的sql。相似於Java 的switch語句,choose爲switch,when爲case,otherwise則爲default。ui

<select id="getStudentListChooseEntity" parameterType="StudentEntity" resultMap="studentResultMap">  SELECT * from STUDENT_TBL ST  <where>   <choose>    <when test="studentName!=null and studentName!='' ">     ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')    </when>    <when test="studentSex!= null and studentSex!= '' ">     AND ST.STUDENT_SEX = #{studentSex}    </when>    <when test="studentBirthday!=null">     AND ST.STUDENT_BIRTHDAY = #{studentBirthday}    </when>    <when test="classEntity!=null and classEntity.classID !=null and classEntity.classID!='' ">     AND ST.CLASS_ID = #{classEntity.classID}    </when>    <otherwise></otherwise>   </choose>  </where> </select>

六 foreach

對於動態SQL 很是必須的,主是要迭代一個集合,一般是用於IN 條件。List實例將使用「list」作爲鍵,數組實例以「array」作爲鍵。

 

1 參數爲list實例的寫法

SqlMapper.xml

<select id="getStudentListByClassIDs" resultMap="studentResultMap">  SELECT * FROM STUDENT_TBL ST   WHERE ST.CLASS_ID IN    <foreach collection="list" item="classList"  open="(" separator="," close=")">    #{classList}   </foreach>  </select>

Java

List<String> classList = new ArrayList<String>(); classList.add("20000002"); classList.add("20000003"); List<StudentEntity> studentList = studentMapper.getStudentListByClassIDs(classList); for(StudentEntity entityTemp : studentList){  System.out.println(entityTemp.toString()); }

2 參數爲Array實例的寫法

 

SqlMapper.xml

<select id="getStudentListByClassIDs" resultMap="studentResultMap">  SELECT * FROM STUDENT_TBL ST   WHERE ST.CLASS_ID IN    <foreach collection="array" item="ids"  open="(" separator="," close=")">    #{ids}   </foreach> </select>

Java

String[] ids = new String[2]; ids[0] = "20000002"; ids[1] = "20000003"; List<StudentEntity> studentList = studentMapper.getStudentListByClassIDs(ids); for(StudentEntity entityTemp : studentList){  System.out.println(entityTemp.toString()); }
相關文章
相關標籤/搜索