mybatis association 問題


    諸位請看一下這個場景,實體對象

public class QueryTestEntity {
    
    String name;
    
    Object obj;
    
    String userId;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Object getObj() {
        return obj;
    }

    public void setObj(Object obj) {
        this.obj = obj;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

}

 

    mybatis配置

  

<resultMap type="QueryTestEntity" id="QueryTestEntityMap1">
        <result column="NAME" property="name" />
    </resultMap>
    
    <resultMap type="QueryTestEntity" id="QueryTestEntityMap">
        <result column="NAME" property="name" />
        <association property="obj" resultMap="QueryTestEntityMap1" /> //這個關聯對象就是為了做一個例子,其他對象也會有這個現象
    </resultMap>

 

    查詢配置如下:

<select id="TestMap1" resultType="QueryTestEntity" parameterType="java.util.HashMap">
        SELECT * FROM (SELECT PHONE_NUMBER NAME,USER_ID    FROM test_table ORDER BY PHONE_NUMBER DESC ) 
    </select>
    
    <select id="TestMap2" resultMap="QueryTestEntityMap" parameterType="java.util.HashMap">
        SELECT * FROM (SELECT PHONE_NUMBER NAME,USER_ID    FROM test_table ORDER BY PHONE_NUMBER DESC) 
    </select>

    

    執行結果為:

    

2016-06-20 18:30:25  [ main:3436 ] - [ DEBUG ]  ==>  Preparing: SELECT * FROM (SELECT PHONE_NUMBER NAME,USER_ID FROM test_table ORDER BY PHONE_NUMBER DESC ) 
2016-06-20 18:30:25  [ main:3437 ] - [ DEBUG ]  ==> Parameters: 
2016-06-20 18:30:25  [ main:3619 ] - [ DEBUG ]  <==      Total: 40
result2:40
2016-06-20 18:30:25  [ main:3619 ] - [ DEBUG ]  ==>  Preparing: SELECT * FROM (SELECT PHONE_NUMBER NAME,USER_ID FROM test_table ORDER BY PHONE_NUMBER DESC) 
2016-06-20 18:30:25  [ main:3619 ] - [ DEBUG ]  ==> Parameters: 
2016-06-20 18:30:26  [ main:3803 ] - [ DEBUG ]  <==      Total: 40
result3:3

    數據說明:其中test_table表中的手機號為重復手機號(其中有三個是不同的),最主要想說的是查詢結果和映射的結果是不一致的。但是如果把映射修改為如下:

 <resultMap type="QueryTestEntity" id="QueryTestEntityMap">
        <result column="NAME" property="name" />
        <result column="USER_ID" property="userId" />//新增USERID屬性,這個屬性唯一
        <association property="obj" resultMap="QueryTestEntityMap1" /> //這個關聯對象就是為了做一個例子,其他對象也會有這個現象
    </resultMap>

 

    執行結果如下:

    

2016-06-20 18:50:26  [ main:3509 ] - [ DEBUG ]  ==>  Preparing: SELECT * FROM (SELECT PHONE_NUMBER NAME,USER_ID FROM test_table ORDER BY PHONE_NUMBER DESC) 
2016-06-20 18:50:26  [ main:3510 ] - [ DEBUG ]  ==> Parameters: 
2016-06-20 18:50:27  [ main:3750 ] - [ DEBUG ]  <==      Total: 40
result3:40

    實驗結論證明:

      1、通過association對象映射對象,如果值相同會有一些問題,映射結果和查詢結果不一致(僅出現在resultMap這個對象上),個人認為這是一個bug,解決方案為映射結果上添加唯一屬性,即可。

      2、沒使用association 功能的對象不會出現這個現象。

 

CREATE TABLE test_table
(
phone_number VARCHAR2(100),
USER_ID VARCHAR2(100)

)

 

    

    mybatis版本:mybatis-3.2.8

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM