诸位请看一下这个场景,实体对象

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

  

转载于:https://www.cnblogs.com/wangn/p/5601526.html

mybatis association 问题相关推荐

  1. mybatis association表关联与rowbounds共同使用时的异常及其解决方案

    按照mybatis手册中所说的,association有两种实现方式,嵌套查询和嵌套结果映射.如手册中所述,select方式会带来N+1次查询的问题,考虑到效率问题的话建议使用嵌套结果映射.但是在结合 ...

  2. MyBatis association的两种形式——MyBatis学习笔记之四

    一.嵌套的resultMap 这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后 association元素再引用 ...

  3. mybatis association select 性能分析

    mybatis中,association select性能分析 <resultMap id="UserAndRoleResultMap" type="com.exa ...

  4. myBatis association的两种形式

    1.嵌套的resultMap 这种方法的本质就是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后association元素再引用这个resultMap元素. ...

  5. mybatis association内嵌collection踩坑

    问题背景 主要用到了association和collection的关联的嵌套 Select 查询 最终返回VO实体 @Data @ApiModel(description = "智能名片 模 ...

  6. Mybatis association标签用途

    association标签用于一对一关系 就是 将另一张表的字段 关联过来 然后一起映射到实体类; 而实体类可以  关联另一张表的实体对象,也可以另一张表中所需的字段; 就是两张表的关联查询, 然后映 ...

  7. Mybatis中的association用法

    这篇文章我们将来学习一些 association 用法 表结构 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11 ...

  8. MyBatis之association嵌套

    表.实体类.myBatisConfig.xml文件.以及测试类请看MyBatis之一对一关联 ,没必要再复制一遍这些内容 嵌套resultMap: [html] view plaincopy < ...

  9. MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)

    (本文示例工程源代码下载地址:http://down.51cto.com/data/1975295) 在上一篇博文的最后,介绍了使用@PostConstruct注解标注StudentDao的init方 ...

最新文章

  1. 清华大数据能力提升项目《数据分析方法》选课开始 !(附旁听名额)
  2. AndroidStudio通过JDBC连接MySQL数据库六大巨坑
  3. Mysql并发时经典常见的死锁原因及解决方法
  4. html在线随机抽取,利用纯html+javascript实现随机抽取显示
  5. 设置MongoDB副本集分为4个步骤
  6. centos安装jdk1.8的三种方法
  7. 【报告分享】2021新青年国货消费研究报告:文化觉醒时代,宝藏国货迎复兴机遇.pdf(附下载链接)...
  8. C# 笔记1 - 操作目录
  9. 探析如何组织计算机课堂教学,探析如何组织计算机课堂教学
  10. matlab fft 基波,fft 谐波分析_matlab fft频谱分析_傅里叶变换谐波分析
  11. LeetCode 285. 二叉搜索树中的中序后继
  12. An工具介绍之3D工具
  13. oracle的oca证书,Oracle三大认证考试及其含金量解析
  14. python画螺旋_如何用python turtle画斐波那契螺旋曲线?
  15. 2.6java基础 数组
  16. 解决SQLyog连接mysql报错:Your password has expired
  17. FFmpeg总结(九)用ffmpeg进行切片生成m3u8索引文件
  18. vue3 状态管理工具 pinia 使用
  19. 错误: 找不到或无法加载主类 iamdev.me.ytds.YTDSApplication
  20. 格林函数的物理意义是什么?

热门文章

  1. 荣耀系列到底算不算华为手机
  2. 女性一辈子不结婚,会怎么样?
  3. 不要根据自己的喜好创业
  4. 一位网友在某职业论坛上就发了一个相关的帖子
  5. 【EIP】以太坊路线图
  6. 智能合约最佳实践 之 Solidity 编码规范
  7. Qt4_在Qt设计师中集成自定义窗口部件
  8. 在SQL Server中设置最大并行度的不同方法
  9. 如何使用sqlpackage和PowerShell将示例bacpac文件导入到Azure SQL数据库
  10. 利用jQuery如何获取当前被点击的按钮