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>