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





發佈了78 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章