動的SQLステートメントの基本的な使用法

 

1.ifステートメント

empnoが空でない場合は、WHEREパラメータの後にAND empno =#{empno}を追加します。1= 1なので、empnoがnullであっても、WHEREの後にエラーは発生しません。

マッピングファイル

<select id = "getEmpById2" resultType = "emp">  
        SELECT * FROM emp WHERE 1 = 1 
        < if test = "empno!= null"> 
            AND empno = #{empno}
         </ if >    
    </ select>

EmpMapperインターフェース

public Emp getEmpById2(@Param( "empno")Integer empno) IOExceptionをスローします。

すべての条件を適用するのではなく、複数のオプションから1つを選択したい場合があります。ifタグを使用する場合、テストの式がtrueである限り、ifタグの条件が実行されます。MyBatisは、choose要素を提供します。ifタグは(および)に関連し、chooseはorに関連しています。

2. WhereステートメントとChoose(いつ、それ以外の場合)

1. empnoとenameがnullの場合、sqlステートメントには表示されません。
2. Chooseタグは、内部のwhenタグのテスト条件が順番に満たされるかどうかを決定します。これらのいずれかがtrueの場合、chooseは終了します。in when whenの条件がすべて満たされていない場合は、それ以外の場合はSQLを実行します。Javaのswitchステートメントと同様に、choose is switchを使用します。

マッピングファイル

<select id = "getEmpById3" resultType = "emp" parameterType = "emp"> 
        SELECT * FROM EMP 
         <where> 
            <choose> 
                <when test = "empno!= null"> 
                    AND empno like#{empno}
                 </ when> 
                <when test = "ename!= null"> 
                    AND#{ename}のようなename
                 </ when> 
                <otherwise> 
                    AND job = "zz" 
                </ otherwise> 
            </ choose> 
        </ where> 
    </ select>

3.setステートメント

セットは主に更新の問題を解決するために使用されます。
マッピングファイル

<update id = "updateEmprById2" parameterType = "emp"> 
        UPDATE emp
         <set> 
            < if test = "ename!= null"> ename =#{ename}、</ if > 
            < if test = "job!= null" > job =#{job}、</ if > 
        </ set> 
        <where> 
            < if test = "empno!= null"> 
                empno = #{empno};
            </ if > 
        </ where> 
    </ update>

4.トリム

トリムマークは、セットまたはどこマークの機能を完了することができるフォーマットされたマークです。
関連属性:
プレフィックス:プレフィックス。
prefixOverrides:最初に指定されたコンテンツを削除します。
suffix:サフィックス。
suffixoverride:最後に指定されたコンテンツを削除します。
マッピングファイル

<!-代替場所-> 
    <select id = "getEmpById4" resultType = "emp" parameterType = "emp"> 
        SELECT * FROM emp
         <!-<where> < if test = "username!= null">およびname =#{username} </ if > </ where>-> 
        <trim prefix = "where" prefixOverrides = "AND | OR"> 
            < if test = "empno!= null"> 
                およびempno = #{empno}
             </ if > 
            < if test = "ename!= null">
                AND ename = #{ename}
             </ if > 
        </ trim>
    </ select>

マッピングファイル

<!-代替セット-> 
    <update id = "updateEmprById3" parameterType = "emp"> 
        update emp
         <trim prefix = "set" suffixOverrides = "、"> 
            < if test = "ename!= null"> 
                ename = #{ename}、
             </ if > 
            < if test = "job!= null"> 
                job = #{job}
             </ if > 
        </ trim> 
        <trim prefix = "where" prefixOverrides = "AND | OR"> 
            < if test = "empno!= null "> 
                およびempno = #{empno}
            </ if > 
        </ trim> 
    </ update>

5. foreachステートメント

Foreachはトラバースに使用され、トラバースされるオブジェクトは配列またはコレクションです。
関連属性:
コレクション:コレクション属性には、リスト、配列、マップの3つの値があります。
オープン:接頭辞。
閉じる:サフィックス。
セパレーター:セパレーター。反復中に各要素を区切るものを示します。
アイテム:反復中の各要素のエイリアスを表します。
インデックス:変数名を使用して、現在のループのインデックス位置を示します。
マッピングファイル

    <insert id = "addEmp6"> 
        emp(ename、job)valuesに挿入
         <foreach collection = "emps" item = "emp" separator = "、"> 
            (#{emp.ename}、#{emp.job})
         </ foreach> 
    </挿入>

6.SQLブロック

マッピングファイル

<!-繰り返しSQLコンテンツを定義する-> 
    <sql id = "baseSql"> 
        empno、ename、job
     </ sql> 
    
    <!-includeを使用してSQLブロックを導入する-> 
    <select id = "selEmp1" resultType = "emp"> 
        select
         <include refid = "baseSql" /> 
         from emp
     </ select>

 

おすすめ

転載: www.cnblogs.com/JonaLin/p/12706411.html