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
转载于:https://www.cnblogs.com/wangn/p/5601526.html
mybatis association 问题相关推荐
- mybatis association表关联与rowbounds共同使用时的异常及其解决方案
按照mybatis手册中所说的,association有两种实现方式,嵌套查询和嵌套结果映射.如手册中所述,select方式会带来N+1次查询的问题,考虑到效率问题的话建议使用嵌套结果映射.但是在结合 ...
- MyBatis association的两种形式——MyBatis学习笔记之四
一.嵌套的resultMap 这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后 association元素再引用 ...
- mybatis association select 性能分析
mybatis中,association select性能分析 <resultMap id="UserAndRoleResultMap" type="com.exa ...
- myBatis association的两种形式
1.嵌套的resultMap 这种方法的本质就是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后association元素再引用这个resultMap元素. ...
- mybatis association内嵌collection踩坑
问题背景 主要用到了association和collection的关联的嵌套 Select 查询 最终返回VO实体 @Data @ApiModel(description = "智能名片 模 ...
- Mybatis association标签用途
association标签用于一对一关系 就是 将另一张表的字段 关联过来 然后一起映射到实体类; 而实体类可以 关联另一张表的实体对象,也可以另一张表中所需的字段; 就是两张表的关联查询, 然后映 ...
- Mybatis中的association用法
这篇文章我们将来学习一些 association 用法 表结构 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11 ...
- MyBatis之association嵌套
表.实体类.myBatisConfig.xml文件.以及测试类请看MyBatis之一对一关联 ,没必要再复制一遍这些内容 嵌套resultMap: [html] view plaincopy < ...
- MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)
(本文示例工程源代码下载地址:http://down.51cto.com/data/1975295) 在上一篇博文的最后,介绍了使用@PostConstruct注解标注StudentDao的init方 ...
最新文章
- 清华大数据能力提升项目《数据分析方法》选课开始 !(附旁听名额)
- AndroidStudio通过JDBC连接MySQL数据库六大巨坑
- Mysql并发时经典常见的死锁原因及解决方法
- html在线随机抽取,利用纯html+javascript实现随机抽取显示
- 设置MongoDB副本集分为4个步骤
- centos安装jdk1.8的三种方法
- 【报告分享】2021新青年国货消费研究报告:文化觉醒时代,宝藏国货迎复兴机遇.pdf(附下载链接)...
- C# 笔记1 - 操作目录
- 探析如何组织计算机课堂教学,探析如何组织计算机课堂教学
- matlab fft 基波,fft 谐波分析_matlab fft频谱分析_傅里叶变换谐波分析
- LeetCode 285. 二叉搜索树中的中序后继
- An工具介绍之3D工具
- oracle的oca证书,Oracle三大认证考试及其含金量解析
- python画螺旋_如何用python turtle画斐波那契螺旋曲线?
- 2.6java基础 数组
- 解决SQLyog连接mysql报错:Your password has expired
- FFmpeg总结(九)用ffmpeg进行切片生成m3u8索引文件
- vue3 状态管理工具 pinia 使用
- 错误: 找不到或无法加载主类 iamdev.me.ytds.YTDSApplication
- 格林函数的物理意义是什么?