mybatisのMySQLのロットudate操作

5121 ワード

本文は転載です
レコードを更新します
UPDATE course SET name = 'course1' WHERE id = 'id1';
複数のレコードを更新する同じフィールドは同じ値です。
UPDATE course SET name = 'course1' WHERE id in ('id1', 'id2', 'id3);    
複数のフィールドが異なる値で記録されている一般的な書き方は、ループを通して、順次udate文を実行します。Mybatisの書き方は以下の通りです。
  
    
        update course
        
            name=${item.name}
        
        where id = ${item.id}
          

一つの記録が一回で、性能が悪くて、渋滞になりやすいです。MySQLは直接的な方法を提供していないので、バッチアップを実現するが、case when文法を使用してこの機能を実現することができる。
UPDATE course
    SET name = CASE id 
        WHEN 1 THEN 'name1'
        WHEN 2 THEN 'name2'
        WHEN 3 THEN 'name3'
    END, 
    title = CASE id 
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)
このsqlはIDが1ならname 1、titleの値はNew Title 1という意味です。これによって類推するMybatisでの構成は、MySQLの単一条件多値のmybatisの一括更新である。

            update course
            
             
                 
                         
                          when id=#{i.id} then #{i.peopleId}
                         
                 
              
                    
                  
                          
                           when id=#{i.id} then #{i.unitsid}
                          
                  
           
             
            where
            
              id=#{i.id}
          

注:
MyBatisのforeach文の詳細解foreachは主にin条件を構築するために用いられ、SQL文の中で一つのセットを反復することができます。foreach元素の属性は主にitem、index、collection、open、separator、closeがあります。itemは、セット内の各要素が反復する時の別名を表し、indexは反復中の位置を表す名前を指定し、openはこの文が何で始まるかを表し、separatorは、反復の間にどの記号を区切り記号として使用するかを表し、closeは何で終わるかを表します。foreachを使う時に一番重要なのは、最も間違いやすいのがcollection属性です。この属性は指定されなければなりませんが、その属性の値は異なるので、主に次の3つの場合があります。collection属性値はlist 2です。単一パラメータであり、パラメータタイプがarray配列である場合、collectionの属性値はarray 3です。複数のパラメータが入ってきたら、Mapにパッケージする必要があります。もちろん、シングルパラメータもmapに封じ込められます。実際にパラメータが入ってきた時は、brestでもMapにカプセル化されています。mapのkeyはパラメータ名です。このとき、collectionの属性値は入ってきたListまたはarrayオブジェクトが自分のパッケージのmapの中のkeyの下でそれぞれ見にきます。
      
上記のcollectionの値はlistで、対応するMapperはこうです。
public List dynamicForeachTest(List ids);  
テストコード:
    @Test  
    public void dynamicForeachTest() {  
        SqlSession session = Util.getSqlSessionFactory().openSession();  
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);  
        List ids = new ArrayList();  
        ids.add(1);  
        ids.add(3);  
        ids.add(6);  
        List blogs = blogMapper.dynamicForeachTest(ids);  
        for (Blog blog : blogs)  
            System.out.println(blog);  
        session.close();  
    }  
================================================個人的にはこれが一番実用的だと思います。
これはmybatisがMySQLで多条件多値な一括更新です。

    	update data_area_cate
        
    	    pub_validly = 
    	    
    		when area_code = #{item.areaCode} AND cate_id = #{item.cateId} then #{item.pubValidly}
    	    
             pub_modi_person = 
    	    
    		when area_code = #{item.areaCode} AND cate_id = #{item.cateId} then #{item.pubModiPerson}
    	    
         pub_modi_date = 
    	    
    		when area_code = #{item.areaCode} AND cate_id = #{item.cateId} then #{item.pubModiDate}
    	    
        
    	
    		
    		area_code = #{item.areaCode} AND cate_id = #{item.cateId}
    	
    	
    
上のロットと新しいエラーがあれば、ここで問題が発生します。一つのアップデートを行うと問題はありませんが、複数の実行を行うとエラーが発生します。he error occurred while setting parametersは修正されました。理由はmysql設定jdbc:driverは&allowMultiQueries=trueを追加するべきです。
url:jdbc:mysql://localhost:3306/mei?characterEncoding=utf8&allowMultiQueries=true