mybatisの一括操作、クエリー、更新、挿入

7389 ワード

バッチ・クエリー
着信ID照会
複数のid用の文字列「1,2,3,4,」を入力して一括クエリーを行う注意:文字列を入力するときは、文字列配列daoインタフェースに切り分けることを覚えておいてください
List getByIds(String[] ids);

mapper
<select id="getByIds" parameterType="java.util.Arrays" resultMap="situationMap">
        SELECT *
        FROM situation s
        WHERE s.id in
        "array" close=")" open="(" separator="," index="index" item="item">
             #{item}
        
    select>

map転送マルチパラメータクエリー
 List<Alert> getByIds(Map<String, Object> map);


mapper

 <select id="getByIds" parameterType="map" resultMap="situationMap">
 SELECT *
        FROM situation s
        WHERE s.id in
   "index" item="item" open="("  separator="," close=")"  collection="ids">
                    #{item}
                

よびだし
  :  map  key    foreach   collection  value
Map<String,Object> map = new HashMap<>();
map.put("ids", ids.toString().split(","));
getByIds(map);

一括挿入
daoインタフェース
    void batchCreateRelation(List<CmdbxxxRelation> list);

mapper
"batchCreateRelation" parameterType="java.util.List">
        INSERT INTO cmdb_xxx_relation(
        source_type,
        source_target,
        dest_type,
        dest_target,
        dest_name,
        relation_type,
        relation_direction)
        VALUES
        "list" item="item" index="index"
                 separator=",">
            (
            #{item.sourceType},
            #{item.sourceTarget},
            #{item.destType},
            #{item.destTarget},
            #{item.destName},
            #{item.relationType},
            #{item.relationDirection}
            )
        
    

一括更新
mybatisの一括更新は主にforeachラベル接合sqlによって一括操作を実現する.
1つ目の方法はsqlに組み立てることです
id="batchUpdateRawEventStatus" parameterType="java.util.List">

update raw_event

set status = 1where id in"list" item="item" index="index" open="(" close=")" separator=",">

${item.id}


第2の方法は、複数のsqlに組み立てる
複数のsqlを組み立てるのはサポートされていません.データベースに接続するurl上で複数のsql制御を開く必要があります.つまり、
allowMultiQueries=true

もちろんJdbcUrlは複数のsqlを実行するのは安全ではありません.sqlに注入されることに注意してください.
id="batchUpdateRawEventStatus" parameterType="java.util.List">

"list" item="item" index="index" open="" close="" separator=";">

update raw_event set status = 1 where id = ${item.id}
 

foreach
foreach要素の属性は主にitem,index,collection,open,separator,closeである.itemは、集合内の各要素が反復するときの別名を表す.indexは、反復中に反復するたびに反復する位置を表す名前を指定する.Openはその文がどのように始まるかを表し、separatorは反復するたびにどのような記号を区切り記号とするかを表す.closeは何で終わるかを表す.
foreachを使用するときに最も重要でエラーが発生しやすいのはcollectionプロパティです.このプロパティは指定する必要がありますが、場合によっては値が異なります.主に3つのケースがあります.1.単一パラメータでパラメータタイプがリストである場合、collection属性値はlist 2となる.単一パラメータでパラメータタイプがarray配列である場合、collectionの属性値はarray 3となる.入力されたパラメータが複数の場合は、1つのMapにカプセル化する必要があります.もちろん、単一のパラメータもmapにカプセル化することができます.実際には、パラメータを入力するときにbreastの中でも1つのMapにカプセル化されます.mapのkeyはパラメータ名です.そのため、collection属性値は、入力されたListまたはarrayオブジェクトが自分のカプセル化されたmapの中にあるkeyです.