mybatis補足:バッチinsert、バッチupdate、バッチdelete、(foreach実装)およびラベルおよびsqlのcase-switch-then文

4020 ワード

ラベル:whereの条件にnullによるクエリーが失敗すると、削除andまたはorが自動的に変更され、where文を実行しないことも選択されます.同様に、余分なカンマを削除するために使用されます.参照可能ラベル同様:update文でifラベルが使用されていない場合、nullのパラメータがある場合、エラーが発生します.
update文でifラベルを使用する場合、前のifが実行されていない場合、カンマに余分なエラーが発生する可能性があります.setラベルを使用すると、SETキーを動的に構成し、条件の末尾に追加された関連のないカンマを削除できます.if+setラベルを使用して変更すると、nullの場合は更新せず、データベースの元の値を維持します.setラベル要素は主に更新操作で使用され、その主な機能とwhereラベル要素は実際には差が少なく、主に含まれる文の前にsetを出力し、含まれる文がカンマで終わるとカンマは無視され、setパッケージに含まれる内容が空であればエラーが発生します.set要素があれば、変更したフィールドリファレンスを動的に更新できます.
sqlのcase-switch-then文
直接上コード–sqlのswitch case文のような使い方
     select getdate()as   ,
             case month(getdate())   
             when 11 then '  '   
             when 12 then '  '   
             else substring('          ',month(getdate()),1)   
             end +' ' as   
             --   SELECT    :CASE      
SELECT a.ReturnTkRate_DisCountRate, 
    'Range' = 
    CASE 
       when a.ReturnTkRate_StaHoursInterval>0 then '  '
       when a.ReturnTkRate_StaHoursInterval<0 then '  '
       else '0' 
    END 
FROM BaseInfo.ReturnTkRate a

はっきり言ってcaseは変数であり、whenの後の条件が成立するとthenの後の値に等しい.elseは前のすべての状況を除いて得られる.endを加えてバッチ更新を正常に終了することができる.注意:この方法は、接続データベースurlを構成した後にパラメータ&allowMultiQueries=trueを持参し、バッチ操作を許可しなければならない.例jdbc:mysql://localhost:3306/mysqlTest?characterEncoding=utf-8&allowMultiQueries=true 1:ラベルを使う:update文もインタフェースにネストする:
 /**
     *        
     * @param list
     * @return
     */
    int updateNewStock(@Param(value = "list") List list);

Mapper.xml

        
            UPDATE green_beans
            
                stock=#{bean.stock}
            
            
                beanUid = #{bean.beanUid}
            
        
    

2つ目:case-when-then-end文リファレンスの使用

        update mydata_table
        
            
                
                     when id=#{item.id} then #{item.status}
                
            
        
        where id in
        
            #{item.id,jdbcType=BIGINT}
        
    

一括更新:+判断mappperインタフェース
 int addEmpsBatch(@Param("emps") List emps); -->

Mapper.xmlファイル

  INSERT INTO emp(ename,gender,email,did)
  VALUES
  
  (#{emp.eName},#{emp.gender},#{emp.email},#{emp.dept.id})
  
 

一括削除:Mapperインタフェース
/**
	 *     
	 * 
	 * @param arr
	 * @return
	 */
	public boolean doRemoveeMore(int[] arr);

mapper.xmlファイル

	
		
		
		delete from emp where empno in
		
			#{arr}
		
	

foreachとinを併用してselectクエリーを実装
パラメータリストにはエンティティクラスがあり、一括挿入と同じ使い方ができます.item..
public List dynamicForeachTest(List ids);