zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    计算机组成原理--中断系统
    操作系统--文件管理2
    操作系统--文件管理1
    操作系统--存储管理4
    操作系统--存储管理3
    操作系统--存储管理2
    操作系统--存储管理1
    有序线性表(存储结构数组)--Java实现
    【Java】之static静态方法与非static静态方法区别
    【Android Studio】之构建项目报错
  • 原文地址:https://www.cnblogs.com/wangn/p/5601526.html
Copyright © 2011-2022 走看看