求java批量更新数据库大字段的解决方案。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求java批量更新数据库大字段的解决方案。相关的知识,希望对你有一定的参考价值。

将文件以blob大字段的形式存到数据库,现在要批量跟新这些文件,请问有什么好的解决方案?

参考技术A 速度方面可以有很多提升的方式,你可以去网上查查,不过效果不会太明显就是!

给你一个经验之谈, 你可以新建一个后台委托或者定时应用,专门用来做静默的批量操作, 比如

比如A是一个web工程,,

1 前台有个触发事件,

2 触发之后, 通知 你另外的工程B, 让B去执行这些费时费内存的操作, 而A仍然能够正常的运行.不会影响其他业务.
3 等待B将这些操作处理完之后,可以通知A, A再去返回结果.

这样的话 能够保持A仍然能够高效的处理其他业务逻辑. 用户也不会感觉到程序的卡顿.
参考技术B 放在同一事物中 一起commit 参考技术C http://download.csdn.net/detail/u012106902/6654815

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() 的结果类型

以上是关于求java批量更新数据库大字段的解决方案。的主要内容,如果未能解决你的问题,请参考以下文章

Thinkphp怎么批量更新数据

Thinkphp怎么批量更新数据

Thinkphp怎么批量更新数据

mysql数据批量更新,谢谢

oracle数据库如何用update批量更新某列数据中的字段

批量更新mysql表数据