Spring+Mybatis访问报错 java.lang.Mapped Statements collection already contains value

hjing0628 2013-04-25 01:10:06
环境为Spring3+mybatis,采用mapping方式实现dao,xml对应。

情况是这样的,项目启动后页面$(document).ready会ajax访问后台同一个controller中的三个映射url完成页面三个表单的初始化工作。但是第一次访问总会有一至二个方法报错,报错内容为:
java.lang.IllegalArgumentException: Mapped Statements collection already contains value for xxx.xxx.dao.method
导致页面1,2处渲染出错。

网上查了以下原因,有说:mybatis并发错误,前台多个请求并发请求mapper
原因大概是请求时mybaits解析sql并执行导致的并发错误。
mybaits初始化时加上以下这句可以解决。让Mybatis初始化时就编译sql语句,
sqlSesssionTemplate.getConfiguration().buildAllStatement。

而我用的mapping方式,不知道在哪里设置k可以达到sqlSesssionTemplate.getConfiguration().buildAllStatement的效果

需要帮助,请大家协助~

配置文件应该都是对的,启动后第一次访问不成功,第二次就可以了。
...全文
18442 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
joveqiao 2015-12-11
  • 打赏
  • 举报
回复
我来回复下: 原因是因为对应的Mapper接口和其他接口名 有包含关系,(名称是子串关系) 而且这两个mapper.xml 里面有重复的 id !!!! joviqiao@qq.com
luanxuefanren 2013-08-15
  • 打赏
  • 举报
回复
问题解决了吗,现在我也遇到这个问题,我在找初始化的入口,目前只有改jar源码了,我在SqlSessionFactoryBean.java的buildSqlSessionFactory加上去。先用着试试吧。
wyhui1987 2013-07-02
  • 打赏
  • 举报
回复
引用 12 楼 zhaokai1241380221 的回复:
问题解决了,错误是因为<select refid="test"></select>这里所指向的test只能由sql标签包围
什么意思没看懂
zhaokai1241380221 2013-04-27
  • 打赏
  • 举报
回复
没有弄错,我刚遇到这个问题,确实是这样解决的!真心的~~
hjing0628 2013-04-25
  • 打赏
  • 举报
回复
引用 12 楼 zhaokai1241380221 的回复:
问题解决了,错误是因为<select refid="test"></select>这里所指向的test只能由sql标签包围
您好,是弄错帖子了吧。
zhaokai1241380221 2013-04-25
  • 打赏
  • 举报
回复
问题解决了,错误是因为<select refid="test"></select>这里所指向的test只能由sql标签包围
forgetsam 2013-04-25
  • 打赏
  • 举报
回复
1 在方法加@Arg或者@Param注解,设定statement的使用方式 2 把方法分散到3个不同接口里。
  • 打赏
  • 举报
回复
那就改为同步的呗
hjing0628 2013-04-25
  • 打赏
  • 举报
回复
引用 8 楼 fangmingshijie 的回复:
那就应该是Statements没有关闭,又使用造成的
感谢回复! 昨天搜索到老外的帖子也是这种情况,但是没出方案: http://mybatis-user.963551.n3.nabble.com/Exception-while-first-calling-after-deploying-application-td2185049.html
  • 打赏
  • 举报
回复
那就应该是Statements没有关闭,又使用造成的
hjing0628 2013-04-25
  • 打赏
  • 举报
回复
引用 6 楼 fangmingshijie 的回复:
#{ud_id,jdbcType=VARCHAR},#{ud_name,jdbcType=VARCHAR},#{ud_address,jdbcType=VARCHAR}这句什么意思?没看明白? values (#ud_id:VARCHAR#, #ud_name:VARCHAR#,#ud_address:VARCHAR#);//这样的到时见过
都可以,去掉VARCHAR注释也行。 另外: 1 页面$(document).ready后ajax请求后台的三个方法改为async:false同步方式就不会报错。 2 第一次报错后,再异步方式执行方才的ajax请求也不会报错。 就是第一次请求,总有1-2个查询失败,报java.lang.IllegalArgumentException: Mapped Statements collection already contains
  • 打赏
  • 举报
回复
#{ud_id,jdbcType=VARCHAR},#{ud_name,jdbcType=VARCHAR},#{ud_address,jdbcType=VARCHAR}这句什么意思?没看明白? values (#ud_id:VARCHAR#, #ud_name:VARCHAR#,#ud_address:VARCHAR#);//这样的到时见过
hjing0628 2013-04-25
  • 打赏
  • 举报
回复
dao为interface,没有sql,例如: @Repository public interface ProduceDAO { void insertProcUdInfo(ProcRecordPO vo) throws DataAccessException; void insertProcWorkInfo(ProcRecordPO vo) throws DataAccessException;} xml为sql文件:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxxx.persistence.dao.ProduceDAO"> <insert id="insertProcUdInfo" parameterType="procRecordPO"> INSERT INTO t_proc_xxxx ( UD_ID,UD_NAME,UD_ADDRESS ) VALUES ( #{ud_id,jdbcType=VARCHAR},#{ud_name,jdbcType=VARCHAR},#{ud_address,jdbcType=VARCHAR} ) </insert> ...
hjing0628 2013-04-25
  • 打赏
  • 举报
回复
dao为interface,没有sql:
hjing0628 2013-04-25
  • 打赏
  • 举报
回复
dao为interface,没有sql:
lvzg_005 2013-04-25
  • 打赏
  • 举报
回复
你是不是在dao方法上注解了sql语句,并且在配置文件中又提供了一条sql呢
  • 打赏
  • 举报
回复
看看你的配置文件
【资源说明】 1、基于springboot+mybatis实现的外卖订餐系统源码+项目说明(毕设).zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 ### 项目概述 首先来了解项目需求。 项目分为客户端和后台管理系统两个界面,客户端针对普通用户,功能包括用户登陆、用户退出、菜品订购、我的订单。 后台管理系统针对管理员,功能包括管理员登陆、管理员退出、添加菜品、查询菜品、修改菜品、删除菜品、订单处理、添加用户、查询用户、删除用户。 需求了解完之后,接下来设计系统,首先分配出4个服务提供者,account、menu、order、user。 - account - 提供账户服务:用户和管理员登陆。 - menu - 提供菜品服务:添加菜品、查询菜品、修改菜品、删除菜品。 - order - 提供订单服务:添加订单、查询订单、删除订单、处理订单。 - user - 提供用户服务:添加用户、查询用户、删除用户、用户修改。 ## 异常 - org.springframework.beans.factory.UnsatisfiedDependencyException 不满足依赖异常 - org.springframework.beans.factory.BeanCreationException - org.springframework.beans.BeanInstantiationException - org.springframework.core.NestedIOException - org.apache.ibatis.builder.BuilderException - java.lang.IllegalArgumentException ``` Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\GUSHI\IdeaProjects\springboot2\target\classes\mapping\UserRepository.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.m.dao.AdminDao.login at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType (AbstractAutowireCapableBeanFactory.java:1431)

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧