MyBatis汇总

来源:互联网 发布:淘宝代运营有效果吗 编辑:IT博客网 时间:2019/10/14 19:56


一:项目报错:

     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





原创粉丝点击