解决mybatis批量更新出现SQL报错问题

一、问题重现

1.配置文件

spring:
  #DataSource数据源
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?useSSL=false&amp
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

#MyBatis配置
mybatis:
  type-aliases-package: com.hl.mybatis.pojo #别名定义
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所用日志的具体实现,未指定时将自动查找
    map-underscore-to-camel-case: true #开启自动驼峰命名规则(camel case)映射
    lazy-loading-enabled: true #开启延时加载开关
    aggressive-lazy-loading: false #将积极加载改为消极加载(即按需加载),默认值就是false
    lazy-load-trigger-methods: "" #阻挡不相干的操作触发,实现懒加载
    cache-enabled: true #打开全局缓存开关(二级环境),默认值就是true

2.sql

@Update({"<script>" +
            "<foreach item='item' collection='list' index='index' open='' close='' separator=';'>" +
            " UPDATE tb_user " +
            "<set>" +
            "<if test='item.userAccount != null'>user_account = #{item.userAccount},</if>" +
            "<if test='item.userPassword != null'>user_password=#{item.userPassword}</if>" +
            "</set>" +
            " WHERE user_id = #{item.userId} " +
            "</foreach>" +
            "</script>"})
    int updateBatch(@Param("list")List<UserInfo> userInfoList);

3.测试

查看控制台错误

发现这里告诉我有一个语法错误,然后发现user_id,有一个符号。>

这里经过测试更新一条是成功的

二、问题分析

Mybatis映射文件中的sql语句默认是不支持以" ; " 结尾的,也就是不支持多条sql语句的执行

但是在SQL编辑器中执行多条sql语句的时候是可以以分号结尾的,如:

三、解决方法

在application.properties配置文中的数据源url后面添加一个参数

&allowMultiQueries=true【允许sql语句中有多个insert或者update语句 == 支持sql批量操作】

原来的配置文件:

url: jdbc:mysql://127.0.0.1:3306/mybatis_test?useSSL=false&amp

现在的配置文件

url: jdbc:mysql://127.0.0.1:3306/mybatis_test?useSSL=false&amp&&allowMultiQueries=true

再次测试

到此这篇关于mybatis批量更新出现SQL报错的文章就介绍到这了,更多相关mybatis批量更新出现SQL报错内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解扩展tk.mybatis的批量更新的功能

    tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现. 批量更新网上主要有2种方式:case when方式.foreach方式 但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章. 扩展tk.mybatis的批量更新,采用case when方式,源码干货如下: 首先定义下mapper接口 import org.apache.ibatis.annotations.UpdateProvider; import java.util.

  • mybatis执行批量更新batch update 的方法(oracle,mysql两种)

    Oracle和MySQL数据库的批量update在mybatis中配置不太一样: oracle数据库: <code class="hljs tcl" style=""><<span class="hljs-keyword" style="">update</span> id=<span class="hljs-string" style=""

  • Mybatis批量更新报错问题

    下面给大家介绍mybatis批量更新报错问题, allowMultiQueries=true 后来发现是jdbc链接没有加允许批量更新操作的参数引起的,不加会报badsql,mysql版的mybatis批量更新操作如下 <update id="updateOrderOverdueStatus" parameterType="java.util.List"> <foreach collection="list" item=&quo

  • Mybatis 批量更新实体对象方式

    目录 Mybatis批量更新实体对象 (1)Dao层接口 (2)Mapper.xml 文件 Mybatis批量更新数据三种方法效率对比 探讨批量更新数据三种写法的效率问题 Mybatis批量更新实体对象 (1)Dao层接口 /** * 根据更新采购计划(批量) * @param plans */ void batchUpdatePlan(List<PubPurchasePlan> plans); (2)Mapper.xml 文件 <sql id="batchUpdatePlan

  • mybatisplus添加真正的批量新增、批量更新的实现

    使用mybatis-plus来进行批量新增和更新时,你会发现其实是一条条sql执行,下面进行优化. 1.添加InsertBatchMethod和UpdateBatchMethod类 import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.metadata.TableInfo; import lombok.extern.slf4j.Slf4j; import

  • 解决mybatis批量更新出现SQL报错问题

    一.问题重现 1.配置文件 spring: #DataSource数据源 datasource: url: jdbc:mysql://127.0.0.1:3306/mybatis_test?useSSL=false&amp username: root password: root driver-class-name: com.mysql.jdbc.Driver #MyBatis配置 mybatis: type-aliases-package: com.hl.mybatis.pojo #别名定义

  • 解决mybatis批量更新(update foreach)失败的问题

    如下所示: <!--批量更新报表 --> <update id="updateIssueByBatch" parameterType="java.util.List"> <foreach collection="issueList" item="item" index="index" separator=";"> update sys_issue &l

  • 解决Navicat导入数据库数据结构sql报错datetime(0)的问题

    错误发生情况: 将数据库从mysql5.7导出为sql,在mysql5.5上进行导入,报sql语句错误:datetime(0)- 错误发生原因 mysql5.7和mysql5.5的datetime.timestamp不兼容 mysql5.7导出的格式为 : datetime(0),mysql5.5则无法识别该语法 解决办法 将导出语句中datetime(0) 改为datetime,或者是timestamp(0) 改为timestamp 保持数据库版本一致 补充知识:navicat导入sql,数据

  • Mybatis批量修改时出现报错问题解决方案

    批量修改代码如下 <update id="UPDATE_HOTEL_REAL_TIME_PRICE" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" separator=";"> UPDATE VST_HOTEL_REAL_TIME_PRICE

  • 解决vue-cli webpack打包开启Gzip 报错问题

    前两天项目上线,用vue-cli npm run build命令打包,打包完成后我擦吓了一跳,15M.本来暂时不打算优化的,但是每次看着部署包这么大,想想还是先优化一下,让包好看点,免得以后出现心理阴影! 在把 map文件干掉后,发现webpack这打包的速度,也忒感人了.在进行不自动生成 map文件设置时,有看到webpack自带的productionGzip功能,索性就一次性一起鼓捣鼓捣. 下面是瞎鼓捣历程,差点就鼓捣不出来了. 1.在项目 根目录config/index.js中build内

  • laravel 解决paginate查询多个字段报错的问题

    用laravel 框架想实现一个分页接口,返回数据表中其中一部分字段 $list = DB::table('booklist_table')->orderBy('create_time','asc')->paginate($size,['id','title','author','image'])->toJson(); return json_decode($list,true); 结果运行报错 "SQLSTATE[42000]: Syntax error or access

  • 解决docker安装后运行hello-world报错的问题

    在centos7.3上yum安装了docker V1.13.1 但是在运行:docker run hello-world的时候报错: # docker run docker.io/hello-world container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set

  • Fluent Mybatis 批量更新的使用

    目录 批量更新同一张表的数据 更新多条数据,每条数据都不一样 java中for循环实现方式 一条SQL,服务端逐条更新 mybatis实现方式 使用FluentMybatis实现方式 使用mysql的Case When then方式更新 mybatis原生实现方式 批量更新不同的表数据 参考 批量更新同一张表的数据 更新多条数据,每条数据都不一样 背景描述 通常需要一次更新多条数据有两个方式 在业务代码中循环遍历,逐条更新 一次性更新所有数据, 采用批量sql方式,一次执行. 更准确的说是一条s

  • Mybatis collection查询集合属性报错的解决方案

    目录 Mybatis collection查询集合属性报错 错误日志 背景 排查 解决方法 MyBatis 包含属性为集合的查询 父实体类 关联子查询实体类 父查询返回结果实体类映射 集合子查询实体类映射 父查询 子查询 Mybatis collection查询集合属性报错 错误日志 org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, cla

随机推荐