MyBatis汇总


一:项目报错:

     java.lang.IllegalArgumentException: Mapped Statements collection already contains value for

  网上搜到各种原因:

     1、由于使用ibatis的TempTestTableMapper.xml实现接口TempTestTableMapper.java中的方法的时候的id有重复的值,比如
    <select id="queryTempTestTableMap"    resultMap="TempTestTableResult"> 中的TempTestTableResult在一个xml文件中有两个这样的id,修改过来即可

无论我检查多少遍,根本不存在重复的id,且报错的时候指向的数据库语句不止一个,由此怀疑是xml的问题。

     2、user-mapper.xml如下

<?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
 <mapper namespace="com.bmdc.dj.user.dao.UserDao">  
     <resultMap type="user" id="userResult">  
         <id property="user_id" column="USER_ID"/>  
         <result property="login_name" column="LOGIN_NAME"/>  
         <result property="real_name" column="REAL_NAME"/>  
         <result property="password" column="PASSWORD"/>  
    </resultMap>  
    <insert id="add" parameterType="user">  
     insert into users (user_id, login_name, real_name, password)13         values(#{user_id}, #{login_name}, #{real_name}, #{password})      </insert>  
 </mapper> 
其中,namespace是接口路径。

Mybatis.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>  
 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
 <configuration>  
   
     <!-- 别名 -->  
     <typeAliases>  
         <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>  
     </typeAliases>  
      <mappers>      
         <mapper resource="com/bmdc/dj/user/dao/user-mapper.xml" />      
     </mappers>  
 </configuration>  
其他配置文件都正确,我就不写了。这样就会出现  Java .lang.IllegalArgumentException: Result Maps collection already contains value for XXX这个错误。

 解决办法是:删除Mybatis.xml中的<mappers>标签所有内容。因为如果user-mapper.xml与namespace的接口在同一路径下,就不需要在mybaits.xml中再进行配置了。

修改后的Mybatis.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>  
 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
 <configuration>  
   
     <!-- 别名 -->  
     <typeAliases>  
         <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>  
     </typeAliases>  
 </configuration> 
我项目中压根就没有这些东西,问题没解决

3、eclipse编译了一份在bin目录下,将bin目录或者WEB-INF下class目录清空即可

我把该清理的全部清理掉,并清理并构建项目,问题依然存在。

4、将页面$(document).ready后ajax请求后台的方法改为async:false,就是异步为false,结果不好用。

5、后来搜到这么一条:(http://blog.csdn.net/dr_lf/article/details/48625867)

mybatis并发:

使用mybatis(使用mybatis jar包:mybatis-3.0.4.jar,mybatis-spring-1.0.0.jar)时发现一个并发问题引起的异常,应用场景:页面向服务端发送了三个请求, 同时请求一个方法,结果抛出异常:

java.lang.IllegalArgumentException: Mapped Statements collection already contains value for 
问题原因:mybatis-3.0.4.jar,mybatis-spring-1.0.0.jar这两个jar包问题,是mybatis的一个buger,在此版本下并发就会出现上面的异常。
解决办法:使用新版本jar包替换现有项目中的mybatis-3.0.4.jar,mybatis-spring-1.0.0.jar包,在spring的配置文件中添加新的命名空间和schema。
修改步骤:1.替换为mybatis新jar包:mybatis-3.1.1.jar,mybatis-spring-1.1.0.jar。
  2.在spring的配置文件中添加新的命名空间和schema:
命名空间:xmlns:util="http://www.springframework.org/schema/util"
schemaLocation最后加入:http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"
  3.配置数据库连接:
   <1>将连原来的<context:property-placeholder location="classpath:/config/jdbc.properties"/>
改为:<util:properties id="dataSourceProps" location="classpath:/config/jdbc.properties"/>;
   <2>将所有<property name="driverClass" value="${datasource.driverClassName}" />改为
<property name="driverClass" value=" #{dataSourceProps['datasource.driverClassName ']}" />方式取值
我升级替换了一下jar包,在配置文件中按以上描述添加新的命名空间,数据连接因我使用的跟他不一样,所以没改,重启服务器后,访问模块,结果没再抛异常,问题终于得以解决。
二: MyBatis常见jar包

mybatis的核心包只有一个mybatis-3.x.0.jar,另外还有一些【可选】的依赖包(日志、代理等所需要的),在下载的压缩包中可以找到.

下载地址:https://github.com/mybatis/mybatis-3/releases





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值