mybatis+mysql如何批量执行多条语句
来源:互联网 发布:围棋 人工智能算法 编辑:程序博客网 时间:2024/05/21 09:21
此处仅描述问题处理方法,关于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配置文件改了回去,测试一下,执行成功。
转自
0 0
- mybatis+mysql如何批量执行多条语句
- Mybatis+MySql 一个标签中执行多条sql语句
- Mybatis批量执行语句
- java批量执行多条Sql语句
- mysqli 批量执行多条语句
- spring+mybatis一个方法执行多条更新语句,实现批量DML
- mybatis一次执行多条sql语句
- MyBatis一次执行多条SQL语句
- MyBatis 一次执行多条SQL语句
- MyBatis一次执行多条SQL语句
- MyBatis执行多条SQL语句
- MyBatis一次执行多条SQL语句
- MyBatis一次执行多条SQL语句
- mybatis一次执行多条delete语句
- 批量执行mysql语句.
- mysql语句:批量更新多条记录
- 如何在mybatis中一个insert,delete,update中执行多条SQL语句
- mysql执行多条语句建表
- Super Pow
- 关于web项目的乱码问题总结
- vim 高亮行号配置
- Javascript写简易计算器
- ACdream 1060 递推数
- mybatis+mysql如何批量执行多条语句
- myeclipse中表单提交乱码问题
- WPF应用
- iOS面试笔记(1)
- 【CSS】float属性详解
- Javascript基础知识(一)
- 尚硅谷_JavaScript_学习笔记
- elasticsearch笔记_字段(名词)类型_分析过程(三)
- LeetCode 242. Valid Anagram (map使用)