6.Mybatis中的動態Sql和Sql片段(Mybatis的一個核心)


視頻地址:http://edu.51cto.com/sd/be679

動態Sql是Mybatis的核心,就是對我們的sql語句進行靈活的操作,他可以通過表達式,對sql語句進行判斷,然后對其進行靈活的拼接和組裝。可以簡單的說成Mybatis中可以動態去的判斷需不需要某些東西。

  動態Sql主要有以下類型:

    if

    choose,when,otherwise

    trim,where,set

    foreach

  這里主要介紹幾個常見的where  if  foreach,直接貼代碼了

    1.where 這里的where有一個好處就是在拼接成功的時候,會自動去掉第一個and

    2.if 這里的if和java基礎中的if用法是一樣,在這里的用法就是當條件成立的時候,就會把sql語句拼接上去,不成立的時候就會把if里面的sql語句忽略

    3.if可以重復並且嵌套使用

    4.這里的student.name是包裝類的寫法

  foreach的用法:把sid在4,5,6,7中的學生找出來 SELECT * FROM t_student WHERE sid in (4,5,6,7);

<!-- 測試foreach代碼 -->
<sql id="forEache">
    <if test="sid_s!=null">
                <!-- 
                    collection:指定你輸入的集合的屬性
                    item:每次遍歷的對象名(別名)
                    open:開始遍歷的時候拼接的字符串
                    close:結束遍歷的時候要拼接的字符串
                    separator:遍歷的對象中間要拼接的字符串
                    SELECT * FROM t_student WHERE sid in (4,5,6,7);
                 -->
                <foreach collection="sid_s" item="sid" open="and sid in (" close=")" separator=",">
                    #{sid}
                </foreach>
            </if> 
</sql>

  Sql片段:(提高配置文件中Sql代碼的重用性)

    Sql片段的寫法:

<!-- 
    id:這個是唯一標識sql代碼片段
    經驗 :    基於單表寫的sql代碼重用性比較高】
        :    就是在sql代碼里不要出現where
 -->
<sql id="query_list">
    <if test="student!=null and student!=''">
            <if test="student.name!=null and student.name!=''">
                and name=#{student.name}
            </if>
            <if test="student.sex!=null and student.sex!=''">
                and sex=#{student.sex}
            </if> 
        </if>
</sql>

    Sql片段的引用:(可以引用其他配置文件的sql片段:命名空間.sql片段的Id)

<!-- 拼接成功的時候,這個where會自動去掉第一個 and -->
    <where>
        <include refid="query_list"></include>    
    </where>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM