在开发过程中都会遇到批量的插入或者是更新数据,本人只写了一下自己在做的过程中遇到问题,写此篇文章的作用:第一是记录自己在工作过程中的问题。第二是方便同行的伙伴们避免出现这样的问题消耗太多的时间。废话不多说,直接上代码。

1.批量插入数据

Dao层:

void insertBatch(List userPermission);

*参数直接是一个List对象

Mapper.xml

resultType="java.lang.Integer">

SELECT LAST_INSERT_ID()

insert into user_permission ()

values

#{item.id,jdbcType=BIGINT},#{item.bid,jdbcType=BIGINT}, #{item.fid,jdbcType=BIGINT},#{item.buttonName,jdbcType=VARCHAR},#{item.buttonState,jdbcType=BIGINT},#{item.effective,jdbcType=BIGINT},#{item.createAt,jdbcType=TIMESTAMP}

id,bid,fid,button_Name,button_state,effective,create_at

*这里要值得注意的是:selectKey是用来自增长主键Id,如果使用的mybatis3.3.*以下的版本是有自增长的bug,mybatis3.3.*以上的版本是修复了该bug.

2.批量更新数据

Dao层:

void updateBatch(List userPermission);

*参数直接是一个List对象

Mapper.xml

update user_permission

when id=#{permission.id} then #{permission.effective}

when id=#{permission.id} then #{permission.updateAt}

id = #{permission.id}

*

一条记录update一次,性能比较差,容易造成阻塞。

MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。

UPDATE user_permission

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的值为name1,title的值为New Title1;依此类推。

以上是我写的最终SQL,仅供小伙伴们参考,臣妾退下了。

springboot批量更新实体_mybatis+mysql+springboot批量插入,批量更新数据相关推荐

  1. mybatis批量夺标添加_MyBatis+MySQL同时执行多条SQL,实现多表插入数据

    相信很多人都遇到过往Mybatis的Mapper.xml文件粘贴SQL的时候,因为多了一个';'而导致SQL报错的情形吧. 难道就不能执行多条SQL了么?其实是可以的.在分表的情况下,这种需求是强烈的 ...

  2. Mysql数据库快速插入亿级数据

    Mysql数据库快速插入亿级数据 接手一个项目,该项目运行了两三年了.接手的时候,只有一个部署文档和全部代码,再没有其他文档了,也没有其他任何人了解这个项目.好吧,试着深入了解吧.代码在测试环境跑来了 ...

  3. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  4. mysql 百万级别 更新_mysql百万级数据高效插入和更新

    测试环境:win10系统+16G内存+mysql5.7.25 1.创建测试表(表结构如下) 2.插入数据方法 @Override @Transactional(rollbackFor = Except ...

  5. MySQL十秒插入百万条数据

    mysql数据库准备 private String Driver = "com.mysql.cj.jdbc.Driver";private String url ="jd ...

  6. mysql 通过存储过程 插入测试百万数据

    #mysql -uroot -p123456create database gblfy; use gblfy create table test(name varchar(10),age int,he ...

  7. mysql命令行批量添加数据_mysql命令行批量插入100条数据命令

    先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...

  8. Mysql创建触发器实现不同表的插入、更新、删除操作

    说明:Mysql5.0以上的版本才支持下面的操作. Mysql 触发器的插入.更新.删除操作. 在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器 在对表admin操作的同时,触 ...

  9. mysql插入并更新(on duplicate key update)

    Mysql插入数据,如果存在此数据,那么就更新这条数据,否则插入数据. 使用 on duplicate key update. 准备工作 建表 create table user_info(id in ...

最新文章

  1. 记录一下集成修改触发模式的过程
  2. 【mycat】简介及安装
  3. 通俗易懂的讲解区块链
  4. npm package.json中的dependencies和devDependencies的区别
  5. Xcode6中使用initWithTitle:title image:image selectedImage:自定义图片
  6. Android之在在EditText的xml里面配置了相关属性依然没有显示光标问题
  7. [费用流专题]Going Home,Minimum Cost,工作安排
  8. [css] 如何写高效的CSS?
  9. win主机上搭建php网站运行环境,Windows server 2008搭建php运行环境图文详解(php5.3)
  10. HTTPS时代全面到来,你准备好了吗?
  11. BZOJ 1597 [Usaco2008 Mar] 土地购买
  12. sqlserver复制表的结构、内容到另一个数据库
  13. vim学习、各类插件配置与安装【转】
  14. [异步图书].精通Python自然语言处理 pdf
  15. 2021年程序员平均工资
  16. apk一般放服务器哪个位置,apk放在服务器
  17. 小学生计算机课如何上,如何上好小学信息技术课
  18. 公司用的非标普通自动化用单片机还是plc_自动化专业现在吃香吗?
  19. 浙江省计算机专业专科院校排名,浙江省高职院校“五强”
  20. Matlab向量场可视化

热门文章

  1. 《港联证券》新三板股票交易规则是什么?如何进行交易?
  2. vue项目 使用 export * from 時候报错
  3. 如何将读取到内存中的BMP图片转换为IplImage
  4. 使用nginx做数据库端口转发
  5. Docker容器学习梳理--应用程序容器环境部署
  6. 解决URL请求的中文乱码问题
  7. python--raise
  8. Office Interop与Tools的区别
  9. 03----3小时 用 websocket 实现聊天室 之项目静态页面搭建
  10. linux 定时执行运行jar包的sh脚本