• mybatis批量新增或更新


    mysql中在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE时,向数据库中插入一条记录:

      若插入数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作(UPDATE 后面的操作),否则插入一条新的记录

    格式

    INSERT tbl_name [(col_name,...)]
        VALUES (expr,...),(...),...
        ON DUPLICATE KEY UPDATE
          col_name=expr
            [, col_name=expr] ... 

    在mybatis中实现批量增加或修改

    (1)参数类型为List

    xxxMapper.xml

    <insert id="batchAddAssets" useGeneratedKeys="true" parameterType="java.util.List">
        <selectKey resultType="INTEGER" keyProperty="id" order="AFTER">
            SELECT
            LAST_INSERT_ID()
        </selectKey>
        insert into api_assets (`guid`,`name`,`level`,`type`,`file_id`,`line_no`,`description`,`parent_guid`)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.guid},#{item.name},#{item.level},#{item.type},#{item.fileId},#{item.lineNo},#{item.description},#{item.parentGuid})
        </foreach>
        ON DUPLICATE KEY UPDATE
        `name`=values(`name`),`level`=values(`level`),`type`=values(`type`),`line_no`=values(`line_no`),`description`=values(`description`),`parent_guid`=values(`parent_guid`)
    </insert>

    xxxMapper.java

    void batchAddAssets(@Param("list") List<ApiAssets> list);

    (2)参数类型为类

    xxxMapper.xml

    <insert id="addStructures" useGeneratedKeys="true" parameterType="com.tydt.bim.model.ApiStructures">
            <selectKey resultType="INTEGER" keyProperty="id" order="AFTER">
                SELECT
                LAST_INSERT_ID()
            </selectKey>
            insert into api_structures (`name`,`file_id`,`guid`,`parent_guid`,`level`,`type`)
            values
            (#{struc.name},#{struc.fileId},#{struc.guid},#{struc.parentGuid},#{struc.level},#{struc.type})
            ON DUPLICATE KEY UPDATE
            `name`=values(`name`),`level`=values(`level`),`type`=values(`type`),`parent_guid`=values(`parent_guid`)
    </insert>

    xxxMapper.java

    void addStructures(@Param("struc") ApiStructures struc);

    foreach说明:

      主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

      foreach元素的属性主要有 item,index,collection,open,separator,close。

        item表示集合中每一个元素进行迭代时的别名

        index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置

        open表示该语句以什么开始

        separator表示在每次进行迭代之间以什么符号作为分隔 符

        close表示以什么结束

        collection属性,是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有:

          如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

          如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

          如果传入的参数是多个,就需要把它们封装成一个Map

     parameterType说明:  

      基本数据类型:

        包含int,String,Date等。作为传参,只能传入一个。通过#{参数名} 即可获取传入的值 

      复杂的数据类型:

        包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值

    注:

      可以传递一个List实例或者数组作为参数对象传给MyBatis。这时,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。

  • 相关阅读:
    期待已久的Ext JS 4.0正式版发布了
    数学学科读到硕士也只是学了皮毛
    数据库迁移
    ExtJS 4正式版今天发布
    BizTalk Server 2010 支持 SFTP 适配器
    MySQL大小写问题
    V$SESSION_LONGOPS
    利用Ganymed SSH2模拟SSH操作
    [Linux] 访问Samba提示“Network path was not found”
    Oracle段高水位(HWM, high water mark)问题
  • 原文地址:https://www.cnblogs.com/baby123/p/11354062.html
Copyright © 2020-2023  润新知