成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

解決mybatis使用foreach批量insert異常的問題

瀏覽:380日期:2023-10-20 13:21:38
異常

org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’INSERT INTO t_user_role(userid,roleid)VALUES(1,3) ; INSERT INTO t_user_ro’ at line 3### The error may involve defaultParameterMap### The error occurred while setting parameters### SQL: INSERT INTO t_user_role(userid,roleid)VALUES(?,?) ; INSERT INTO t_user_role(userid,roleid)VALUES(?,?) ; INSERT INTO t_user_role(userid,roleid)VALUES(?,?)### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’INSERT INTO t_user_role(userid,roleid)VALUES(1,3) ; INSERT INTO t_user_ro’ at line 3; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’INSERT INTO t_user_role(userid,roleid)VALUES(1,3) ; INSERT INTO t_user_ro’ at line 3at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)at com.sun.proxy.$Proxy13.insert(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:240)at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:51)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)at com.sun.proxy.$Proxy14.addRoles(Unknown Source)at com.atguigu.atcrowdfunding.manager.service.impl.UserServiceImpl.addRoles(UserServiceImpl.java:139)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)at com.sun.proxy.$Proxy17.addRoles(Unknown Source)at com.atguigu.atcrowdfunding.manager.controller.UserController.doAddRoles(UserController.java:271)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:833)at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Unknown Source)Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’INSERT INTO t_user_role(userid,roleid)VALUES(1,3) ; INSERT INTO t_user_ro’ at line 3at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)at java.lang.reflect.Constructor.newInstance(Unknown Source)at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)at com.mysql.jdbc.Util.getInstance(Util.java:387)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2617)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2550)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192)at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:823)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:62)at com.sun.proxy.$Proxy24.execute(Unknown Source)at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:44)at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:69)at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:48)at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:105)at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:71)at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:152)at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)... 65 more異常分析

mapper.xml導致的錯誤地方

<insert id='addRoles'> <foreach collection='data.ids' item='id' separator=';'> INSERT INTO t_user_role(userid,roleid)VALUES(#{userId},#{id}) </foreach> </insert>

異常中說

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’INSERT INTO t_user_role(userid,roleid)VALUES(1,3)

首先覺得是 sql語句的問題,但是用sqlyog測試發現沒有問題

后來發現是數據庫對多個語句拼在一起的操作不支持問題

解決辦法

在jdbcUrl中加入allowMultiQueries=true即可解決

jdbc.url=jdbc:mysql://localhost:3306/atcrowdfunding?allowMultiQueries=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8

補充:Mybatis foreach嵌套 批量insert map list數據

方式一:

以Teacher和Students為例 ,兩者為一對多關系:**

解決mybatis使用foreach批量insert異常的問題

Teacher 實體類

private String tid;private String tName;private List<Student> studentList; public String getTid() { return tid;} public void setTid(String tid) { this.tid = tid;} public String gettName() { return tName;} public void settName(String tName) { this.tName = tName;} public List<Student> getStudentList() { return studentList;} public void setStudentList(List<Student> studentList) { this.studentList = studentList;}

Student實體類

private String sid;private String sName;public String getSid() { return sid;} public void setSid(String sid) { this.sid = sid;} public String getsName() { return sName;} public void setsName(String sName) { this.sName = sName;}

應用場景 :在老師的service層批量插入老師數據

int nums=1000; //定義teacher list List<Teacher> teaList=new ArrayList<Teacher>(); //數據是通過excel讀取的 此處模擬循環讀取excel row數據 for(int rowi=0;rowi<nums;rowi++){ Teacher teacher=new Teacher(); teacher.settName('xxx'); List<Student> stuList=new ArrayList<Student>(); Student student=new Student(); //此處獲取Students集合 for(xxx){ stuList.add(student); } //把student集合和teacher綁定 teacher.setStudentList(stuList); //把teacher放入list teaList.add(teacher); } // 批量插入老師數據 teacherMapper.batchInsertTeacher(teaList); //此時每個teacher對象都有返回的主鍵id值 //老師主鍵 對應一個list(學生信息) map Map<String,List<Student>> stuMap=new HashMap<>(); //填入數據 老師主鍵一對多學生信息 for(Teacher tea:teaList){ //非空判斷 避免老師沒有對應學生的情況(此處只進行邏輯處理 不考慮現實中老師沒有學生) if(tea.getStudentList()!=null&&tea.getStudentList().size()>0){ stuMap.put(tea.getTid(),tea.getStudentList()); } } //調用學生service的批量保存學生方法 studentService.batchInsertStudent(stuMap);

student Mapper接口文件

int batchInsertStudent(@Param('stuMap') Map<String,List<Student>> stuMap);

student mapper.xml文件(寫法一:)

<insert parameterType='java.util.Map'> INSERT INTO bs_student (sid,sName,tid) values <foreach collection='stuMap.keys' index='key' item='itemKey' separator=','> <foreach collection='stuMap[itemKey]' index='index_list' item='list' separator=',' > ( (select REPLACE(UUID(),’-’,’’) AS sid) ,#{list.sName},#{itemKey} ) </foreach> </foreach></insert>

student mapper.xml文件(寫法二:)

<insert >INSERT INTO bs_student (sid,sName,tid)<foreach collection='stuMap.keys' index='index' item='itemKey' separator='UNION ALL'><foreach collection='stuMap[itemKey]' index='index_list' item='list' separator='UNION ALL'>(SELECT (select REPLACE(UUID(),’-’,’’) AS sid),#{list.sName},#{itemKey}FROM DUAL)</foreach></foreach></insert>

stuMap:就是在接口中使用@Param(“stuMap”)標注了變量;

使用stuMap.keys可以取到所有的key,遍歷。

內層循環中使用stuMap[itemKey]類似stuMap.get(“key”)取當前key對應的value值。由于value是list所以還需要遍歷。

結果保存成功。再次膜拜強大的Mybatis。

至此 成功插入student數據。

方式二(推薦):

自定義類

class EnclosingType{ private String uuid; private List<ElementType> elements;}

class ElementType{ String a; String b; (...)}

Mapper.xml(方法一)

<mapper namespace='my.example.ElementType'> <insert parameterType='EnclosingType'> INSERT INTO table1(enclosingTypeId,column_a,column_b) VALUES <foreach collection='elements' index='index' item='list' separator=','> ( #{uuid,jdbcType=VARCHAR} ,#{list.a,jdbcType=VARCHAR} ,#{list.b,jdbcType=VARCHAR} ) </foreach> </insert></mapper>

Mapper.xml(方法二)

<mapper namespace='my.example.ElementType'> <insert parameterType='EnclosingType'> INSERT INTO table1(enclosingTypeId,column_a,column_b) <foreach collection='elements' index='index' item='list' separator='union all'> ( select #{uuid,jdbcType=VARCHAR} ,#{list.a,jdbcType=VARCHAR} ,#{list.b,jdbcType=VARCHAR} from dual ) </foreach> </insert></mapper>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Mybatis 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日本亚洲视频在线| 国产日产高清欧美一区二区三区| 99久久久无码国产精品| 欧美日韩一区小说| 亚洲6080在线| 亚洲免费中文| 亚洲一二三四区| 国产伦理一区| 亚洲午夜羞羞片| 亚洲成人直播| 亚洲天堂网中文字| 天天免费综合色| 亚洲免费高清| 久久色中文字幕| 本田岬高潮一区二区三区| 欧美一区二区播放| 黄色小说综合网站| 欧美高清视频不卡网| 久久成人免费网站| 91精品国产综合久久久久久久久久| 国产一区二区中文字幕| 91精品国产一区二区人妖| 国产麻豆午夜三级精品| 日韩欧美一区二区免费| 99久久婷婷国产综合精品电影| wwww国产精品欧美| 色综合一区二区三区| 欧美国产一区二区在线观看| 国内精品福利| 亚洲精品日韩专区silk| 免费久久久一本精品久久区| 丝袜亚洲另类欧美| 欧美综合视频在线观看| 激情综合色综合久久| 91精品国产综合久久精品麻豆 | 国产农村妇女精品| 亚洲午夜精品国产| 亚洲人成7777| 性欧美xxxx大乳国产app| 午夜精品福利视频网站| 欧美日韩精品欧美日韩精品一| 久久99国产精品久久| 欧美精品九九99久久| 成人a免费在线看| 日本一区二区三区视频视频| 亚洲日本精品国产第一区| 亚洲香蕉伊在人在线观| 欧美撒尿777hd撒尿| 成人激情文学综合网| 国产精品家庭影院| 久久国产手机看片| 国产精品1区2区| 久久女同性恋中文字幕| 亚洲大胆视频| 蜜臀av一级做a爰片久久| 日韩女优视频免费观看| 亚洲一级黄色| 亚洲国产精品久久人人爱蜜臀| 欧美午夜片在线看| 99视频在线精品| 一个色在线综合| 在线成人小视频| 亚洲性感激情| 免费看日韩精品| 久久综合色一综合色88| 亚洲视频二区| 国产一区二区在线电影| 国产精品久久网站| 色婷婷综合久久久| 97成人超碰视| 午夜日韩在线电影| 日韩一区二区中文字幕| 在线免费高清一区二区三区| 免费看日韩a级影片| 久久美女高清视频| 免费精品视频| 成人性色生活片免费看爆迷你毛片| 中文字幕在线观看一区| 欧美日韩色综合| 欧美涩涩视频| 蜜臀91精品一区二区三区| 久久久久久97三级| 羞羞答答国产精品www一本| 成人午夜私人影院| 亚洲一区二区五区| 精品国免费一区二区三区| 亚洲综合不卡| 丁香天五香天堂综合| 一级精品视频在线观看宜春院 | 亚洲男人的天堂av| 在线观看91精品国产麻豆| 亚洲片区在线| 国产91在线观看丝袜| 亚洲激情成人在线| 日韩午夜激情电影| 国产伦精品一区二区三区| 成人国产电影网| 亚洲国产精品久久艾草纯爱| 久久人人超碰精品| 欧美性大战久久久久久久蜜臀| 国产精品v日韩精品v欧美精品网站| 青青草成人在线观看| 国产精品久久久久久一区二区三区| 欧美日韩国产综合一区二区三区| 亚洲日本黄色| 99这里只有精品| 麻豆精品久久久| 亚洲欧美一区二区三区久本道91| 欧美一区二区三区免费大片| 先锋a资源在线看亚洲| 欧美在线日韩| 久久99精品一区二区三区| 亚洲激情校园春色| 国产丝袜欧美中文另类| 欧美男生操女生| 亚洲欧美99| 欧美韩日精品| 国产成人综合在线| 五月天欧美精品| 日韩一区欧美小说| 2020国产精品自拍| 欧美日韩午夜在线视频| 亚洲综合欧美日韩| 狠狠干成人综合网| jvid福利写真一区二区三区| 毛片av中文字幕一区二区| 亚洲最快最全在线视频| 国产精品丝袜在线| 精品国产乱码久久久久久影片| 欧美日韩视频在线第一区| 99riav国产精品| 99精品热视频| 国产一区亚洲一区| 日韩一区欧美二区| 亚洲精品免费视频| 国产精品―色哟哟| 久久久99精品免费观看| 欧美精品丝袜久久久中文字幕| 免费h精品视频在线播放| 极品中文字幕一区| 91美女福利视频| 成人一区二区三区视频在线观看 | 国产在线欧美日韩| 99在线精品视频| 国产一区二区美女| 奇米影视一区二区三区| 亚洲一卡二卡三卡四卡| 亚洲色图一区二区三区| 国产精品色在线| 欧美经典一区二区| 久久久精品黄色| 精品理论电影在线观看| 91精品国产色综合久久久蜜香臀| 在线看一区二区| 久久久久久国产精品一区| 在线一区欧美| 亚洲二区精品| 好吊一区二区三区| 国产精品二区在线| av在线不卡观看免费观看| 国产二区国产一区在线观看| 国产另类ts人妖一区二区| 经典三级在线一区| 极品美女销魂一区二区三区免费| 看片网站欧美日韩| 日韩激情视频网站| 日韩成人一区二区| 蜜臀久久99精品久久久久久9| 午夜在线成人av| 调教+趴+乳夹+国产+精品| 亚洲成人一区在线| 视频一区二区三区在线| 爽好久久久欧美精品| 日韩中文字幕区一区有砖一区| 三级欧美韩日大片在线看| 日韩精品一级中文字幕精品视频免费观看| 亚洲五码中文字幕| 一二三区精品福利视频| 亚洲国产精品自拍| 人人狠狠综合久久亚洲| 国产在线精品一区在线观看麻豆| 国产成人免费视频网站高清观看视频 | 最新国产精品久久精品| 综合亚洲深深色噜噜狠狠网站| 亚洲免费电影在线| 一区二区三区不卡视频在线观看| 夜夜揉揉日日人人青青一国产精品 | 狠狠色丁香久久婷婷综合丁香| 国产又黄又大久久| 成人国产免费视频| 欧美日韩国产综合视频在线| 亚洲一级影院| 免费亚洲一区二区| 欧美日韩一区国产| 日韩欧美一二区| 国产情人综合久久777777| 亚洲欧洲三级电影| 午夜久久久久久电影| 激情五月播播久久久精品| av网站免费线看精品|