mybatis+mysql批量插入和批量更新

一、批量插入

批量插入数据使用的sql语句是:

insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo,oo,oo)

mybatis中mapper.xml的代码如下:

  <!-- 批量插入数据 -->
    <insert id="insertBatch" parameterType="java.util.List"
        useGeneratedKeys="true">
        <selectKey resultType="long" keyProperty="id" order="AFTER">
            SELECT
            LAST_INSERT_ID()
        </selectKey>
        insert into wd_solr
        (fayu_id, tablename,
        name,logo,description,section_no,look_count,favorite_count,create_uid,create_time,update_time,timestamp)
        values
        <foreach collection="list" item="wdSolr" index="index"
            separator=",">
            (
            #{wdSolr.fayuId},#{wdSolr.tablename},#{wdSolr.name},#{wdSolr.logo},
            #{wdSolr.description},#{wdSolr.sectionNo},#{wdSolr.lookCount},#{wdSolr.favoriteCount},
            #{wdSolr.createUid},#{wdSolr.createTime},#{wdSolr.updateTime},#{wdSolr.timestamp}
            )
        </foreach>
    </insert>

二、批量更新

批量更新数据使用的sql语句是:

UPDATE table
    SET aa = CASE id
        WHEN 1 THEN ‘oo‘
        WHEN 2 THEN ‘pp‘
        WHEN 3 THEN ‘qq‘
    END
  ,SET bb = CASE id
        WHEN 1 THEN ‘xx‘
        WHEN 2 THEN ‘yy‘
        WHEN 3 THEN ‘zz‘
    END
WHERE id IN (1,2,3)

上面这一条mysql语句可以更新多条记录,mybatis中mapper.xml的代码如下:

 <!-- 批量更新数据 -->
    <update id="updateBatch">
        update wd_solr set
        name =
        <foreach collection="list" item="wdSolr" index="index"
            separator=" " open="case id" close="end">
            when #{wdSolr.id} then
            #{wdSolr.name}
        </foreach>
        ,logo =
        <foreach collection="list" item="wdSolr" index="index"
            separator=" " open="case id" close="end">
            when #{wdSolr.id} then
            #{wdSolr.logo}
        </foreach>
        ,timestamp =
        <foreach collection="list" item="wdSolr" index="index"
            separator=" " open="case id" close="end">
            when #{wdSolr.id} then #{wdSolr.timestamp}
        </foreach>
        where id in
        <foreach collection="list" item="wdSolr" index="index"
            separator="," open="(" close=")">
            #{wdSolr.id}
        </foreach>
    </update>

三、SELECT LAST_INSERT_ID() 的使用和注意事项

转载自:https://blog.csdn.net/czd3355/article/details/71302441

  总体解释:将插入数据的主键返回到 user 对象中。
  具体解释:
  SELECT LAST_INSERT_ID():得到刚 insert 进去记录的主键值,只适用与自增主键
  keyProperty:将查询到主键值设置到 parameterType 指定的对象的那个属性
  order:SELECT LAST_INSERT_ID() 执行顺序,相对于 insert 语句来说它的执行顺序
  resultType:指定 SELECTLAST_INSERT_ID() 的结果类型

原文地址:https://www.cnblogs.com/awzf/p/9946896.html

时间: 2024-10-11 09:31:39

mybatis+mysql批量插入和批量更新的相关文章

MySql快速插入以及批量更新

插入: MySql提供了可以一次插入多条数据的用法: [sql] INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9),(10,11,12)...;  在程序中可以通过循环,添加Values对应的列表,最后使用一次executeUpdate完成插入操作.但是Mysql语句并不是越长越好,MYsql语句长度有限制,可以查看mysql的配置文件my.in中max_allowed_packet属性,并进行相应设置. 更新: Mysql中没

MyBatis+MySQL 返回插入记录的主键ID

今天用到了多个表之间的关系,另一个表中的一个字段要以第一个表的主键作为外键. 下面说两种方法,MyBatis+MySQL 返回插入记录的主键ID: 第一种: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us

oracle 在xml中批量插入,批量修改及多组条件查询

最近公司用ibatis开发项目,本来可以用存储过程处理批量插入,批量修改及多组条件查询:但由于使用模块相对较小,暂时就在xml中配置,以前没有在xml做过类似处理,有必要记录一下:好了,代码如下: <!-- 批量插入 --> <insert id="saveNotificationPushInfo" parameterClass="java.util.List"> <![CDATA[INSERT ALL]]> <iterat

mybatis批量插入和批量更新

在工作中遇到这一块,也是百度解决了烦恼.在此整理了一下. /** * <p> * 数据展示内容配置明细 Mapper 接口 * </p> * * @author dsh123 * @since 2018-05-23 */ public interface AdminDataContentDetailMapper extends BaseMapper<AdminDataContentDetail> { public void insertBatch(@Param(valu

mybatis Oracle 批量插入,批量更新

传入的参数只要是list类型的参数就行了..............1.批量插入 <insert id="insertBatch" parameterType="java.util.List"> INSERT INTO T_CITY_INDEX( id,city_code ) select SEQ_CITY_INDEX.NEXTVAL,cd.* from( <foreach collection="list" item=&quo

mybatis批量插入、批量删除

mybatis 批量插入 int addBatch(@Param("list")List<CustInfo> list); <insert id="addBatch" parameterType="java.util.List"> INSERT INTO CUSTINFO( SERIALID, CUSTID, INVNM, UPDATETIMESTAMP ) <foreach collection="lis

批量插入,批量修改的sql

sql 1  批量插入 <insert id="batchInsert" useGeneratedKeys="true" parameterType="java.util.List" > <selectKey resultType="long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() <

sql server中的大数据的批量操作(批量插入,批量删除)

首先我们建立一个测试用员工表 ---创建一个测试的员工表--- create table Employee( EmployeeNo int primary key, --员工编号 EmployeeName nvarchar(50) null, --员工名称 CreateUser nvarchar(50) null, --创建人 CreateDate datetime null, --创建时间 ) 执行后结果: 那么假如我们要批量插入10000条数据,应该怎么办? 这里有四种方法(普通循环,事务循

sql Server如何执行批量插入和批量删除

平时我们sql server执行查询语句都是通过 insert into 表名(字段名,字段名) values(插入值,插入值) --单条插入语句--- insert into Reader(readerName) values('测试') 那如何进行批量插入呢?除了多条insert 语句组合而成,还有其他吗? --Sql Server 的批量添加--- --方式1:多条insert语句插入---- insert into Reader(readerName) values('读者1'); in