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

      

  • 相关阅读:
    ubuntu 18.04 修改 固定ip
    java 加载properties
    Free 4 months Serial License Key Of Outpost Security Suite Pro 8.1
    免费申请一年版Eset NOD32 Antivirus激活码(无限制)- 已失效
    微软软件运行库下载
    Bitdefender Total Security 2014 Free 6 Months & 12 month License Key
    如何将Virtualbox和VMware虚拟机相互转换[译文211]
    Virtualbox安装Windows 8.1遇到0x000000C4错误解决办法
    VirtualBox 4.3“不能为虚拟电脑 打开一个新任务”解决方案
    docx文件怎样打开
  • 原文地址:https://www.cnblogs.com/wangn/p/5601526.html
Copyright © 2011-2022 走看看