mybatisのMySQLのロットudate操作
5121 ワード
本文は転載です
レコードを更新します
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の下でそれぞれ見にきます。
これはmybatisがMySQLで多条件多値な一括更新です。
レコードを更新します
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