此处仅描述问题处理方法,关于mysql、mybatis的内容不在此赘述。
因为项目需要,需要在mybatis同个标签中执行多条sql语句。如下:
<insert id="insertUser" parameterType="com.test.model.User"> insert into user (id,email,name,phone,status) values(#{id,jdbcType=INTEGER},#{email,jdbcType=VARCHAR},#{nick,jdbcType=VARCHAR},#{phone,jdbcType=VARCHAR},#{status,jdbcType=INTEGER}); delete from roleuser where userid=#{id,jdbcType=INTEGER}; <if test="roles != null and roles.size() != 0 "> insert into roleuser (userid,roleid) values <foreach collection="roles" item="roleId" separator="," close=";"> (#{id,jdbcType=INTEGER},#{roleId,jdbcType=INTEGER}) </foreach> </if> </insert>
寻思着,在mysql中同时执行多条语句时,mysql是一条一条执行的。如果我一次性向mysql发送多条语句,它应该也会这么执行的。
我承认一开始想的太简单了,直接这样做的结果,是会在jdbc驱动层面报出语法错误异常,程序无法执行下去。
debug后发现,从mybatis拼装sql,到语句传入jdbc驱动,语句都是正常的,但是在mysql驱动验证sql合法性时,sql被截断,它认为一次性发过去的多条sql是不合法的。
看了网上很多说法,一说是mybatis本身不支持;一说是mysql驱动不支持。困扰很久,没能解决,后为了项目进度,暂时将sql分开执行了。
<insert id="insertUser" parameterType="com.test.model.User"> insert into user (id,email,name,phone,status) values(#{id,jdbcType=INTEGER},#{email,jdbcType=VARCHAR},#{nick,jdbcType=VARCHAR},#{phone,jdbcType=VARCHAR},#{status,jdbcType=INTEGER}); </insert> <delete id="deleteUserById" parameterType="java.lang.Integer"> delete from roleuser where userid=#{id,jdbcType=INTEGER}; </delete> .........
但今天,有高人,跟我说,这样做不行,是因为你没有让mysql驱动开启批量执行sql的开关。
怎么开启呢?在拼装mysql链接的url时,为其加上allowMultiQueries参数,设置为true,如下:
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
加了参数后,我又将mybatis配置文件改了回去,测试一下,执行成功。
这里记录一下,希望对看到的人,有所帮助。
相关推荐
SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+...
springboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单...
这是一个java WEB小项目,用 Maven Springboot+mybatis+mysql+redis集成的小项目例子,可供新手进行参考学习,数据库是mysql 5.5 ,只是一个简单的小参考例子,测试过可以正常运行
基于Springboot+Mybatis+Mysql 实现的成绩管理系统 基于Springboot+Mybatis+Mysql 实现的成绩管理系统 基于Springboot+Mybatis+Mysql 实现的成绩管理系统 基于Springboot+Mybatis+Mysql 实现的成绩管理系统 基于...
后端: SpringBoot + MyBatis + MySQL 前端: Vue + ElementUI 教育培训机构管理系统,此系统为前后端分离方式开发的系统,技术栈为: 后端: SpringBoot + MyBatis + MySQL 前端: Vue + ElementUI 教育...
maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建
Spring mvc + mybatis+mysql 很简单的增删改查页面 适合新手学习
毕设项目:基于SpringBoot+MyBatis+mysql的飞机订票系统 毕设项目:基于SpringBoot+MyBatis+mysql的飞机订票系统 毕设项目:基于SpringBoot+MyBatis+mysql的飞机订票系统 毕设项目:基于SpringBoot+MyBatis+mysql的...
基于SpringBoot+Mybatis+mysql的毕业生就业信息分析系统 基于SpringBoot+Mybatis+mysql的毕业生就业信息分析系统 基于SpringBoot+Mybatis+mysql的毕业生就业信息分析系统 基于SpringBoot+Mybatis+mysql的毕业生就业...
springboot+mybatis+mysql+layUI+thymeleaf实现对学员信息的增删改查
该项目主要技术架构包括:spring+springMVC+Mybatis+MYSQL+Redis+Maven,适合初学者,简单易懂。
Springboot+MyBatis+mysql+jsp页面跳转详细示例
基于Springboot+MyBatis+MySQL实现多功能个人博客系统 项目经过严格测试,确保可以运行! 功能点: 用户注册登录功能 Markdown文章发布功能 文章分页显示 文章分类 文章标签/标签云 文章点击量 阅读排行 赞...
springboot+mybatis+mysql+jsp+bootstrap+web.xml例子
ORM:MyBatis 数据库:MySQL 5.7 分布式缓存:Redis 本地缓存:Caffeine 消息队列:Kafka 2.13-2.7.0 搜索引擎:Elasticsearch 6.4.3 安全:Spring Security 邮件任务:Spring Mail 分布式定时任务:Spring Quartz ...
spring+mybatis+mysql实现的用户登录功能
spring-boot+mybatis+mysql+maven整合,有教程,可以去我的博客看
Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
后端: SpringBoot + MyBatis + MySQL 前端: Vue + ElementPlus + Echarts 此系统为前后端分离方式开发的系统,技术栈为 后端: SpringBoot + MyBatis + MySQL 前端: Vue + ElementPlus + Echarts 此系统为...
基于SpringBoot+Mybatis+Mysql技术栈的前后端分离外卖管理系统.zip基于SpringBoot+Mybatis+Mysql技术栈的前后端分离外卖管理系统.zip基于SpringBoot+Mybatis+Mysql技术栈的前后端分离外卖管理系统.zip基于SpringBoot...