首页 > 其他分享 >mybatis 笔记

mybatis 笔记

时间:2023-06-16 14:04:56浏览次数:27  
标签:name resultMap id 笔记 mybatis 主键 定义

查询结果被合并

mapper 中定义的 sql 查询结果有3条,但执行 mapper 接口方法返回的实体列表只有1条,数据数量不符。这有可能是由于 xml 中的定义的 resultMap 有缺陷,如没有明确的定义一个用作主键的列,这分两种情况分别说明。

// reusltMap 定义
<resultMap id="vo" type="ProjectCentersStatisticsVo">
<association property="entityA" javaType ="domain.entityA">
<id property="id" column="id" />
</association>
</resultMap>

<select id="selectSql" resultMap="vo">
select id, name from t where xxx
</select>

第一种,resultMap 的定义中没有任何 result 或列,有的是 associationcollection association 中有id定义,此时,不会出现该问题,sql语句中出现的唯一的id被映射到entityA中的id
第二种,resultMap中定义了一个result,但它并不是id或者它在sql查询结果中并不是唯一的,但此时mybatis会将其看作主键来使用,值相同的结果被合并留下最后一条,会造成问题发生。

<resultMap id="vo" type="ProjectCentersStatisticsVo">
<result property="name" column="name" />
<association property="entityA" javaType ="domain.entityA">
<id property="id" column="id" />
</association>
</resultMap>

在上例中,resultMap中定义了一个name列,mybatis在处理查询结果时会将其作为主键,name相同的记录(行)将替代上一个,直至留下最后一个name不同的行。例如查询结果有3条,其中两条nametom,一条namejerry,mybatis处理后将返回2条记录,最后一条tom和唯一的一条jerry
第三种,为了避免发生上述问题,人为明确的定义一个主键在resultMap中,默认名字是id,如下

<resultMap id="vo" type="ProjectCentersStatisticsVo">
<result property="pk" column="pk" />
<result property="name" column="name" />
<association property="entityA" javaType ="domain.entityA">
<id property="id" column="id" />
</association>
</resultMap>

<select id="selectSql" resultMap="vo">
select id, id pk, name from t where xxx
</select>

在上例中,通过给resultMap增加一个pk字段来表示主键,在sql中增加一个pk列并为了保证其值的唯一用真的id填充,这样的好处是原本查询结果中的id字段还能正确映射到entityA中的id

标签:name,resultMap,id,笔记,mybatis,主键,定义
From: https://www.cnblogs.com/cinlap/p/17485339.html

相关文章

  • Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
    前言  前面做了一些交互,网页是直接通过html对response进行返回的,这里QtWebApp与传统的web服务器不同,传统的web服务器可以调用同级目录相对路径或者绝对路径下的js,而QtWebApp的httpserver是response返回当前页面的问题,默认是无法调用的。  为了解决调用一些依赖的如echarts......
  • 整体二分学习笔记
    概念对于一个很多询问的题,假如对于一个询问可以二分处理,同时一次check可以只用\(n\)的时间处理所有询问的check结果,我们可以使用整体二分来做这个题。思想设函数\(\operatorname{solve}(S,L,R)\)为现在正在处理询问序列\(S\)里的询问,答案值域为\([L,R]\)。向下......
  • 【笔记】learning git branching
    git图是由子节点指向父节点(可能有多个父节点)gitcommitgitbranchgitmergegitrebase......
  • 系统架构设计师笔记第16期:数据库基本概念
    数据库技术的发展数据库技术在过去几十年中经历了显著的发展和演变。层次数据库和网状数据库:20世纪60年代和70年代初,层次数据库和网状数据库是主流的数据库模型。层次数据库使用树状结构组织数据,而网状数据库使用复杂的网络结构。这些数据库模型适用于特定的数据组织和查询需求,但缺......
  • MyBatis快速入门--环境搭建
     1.------------------------------CREATEdatabasemybatis;usemybatis;CREATETABLEtb_user(idINTPRIMARYKEYauto_increment,usernamevarchar(20),passwordvarchar(20),genderCHAR(1),addrvarchar(30));INSERTintotb_user(id,username,password,gen......
  • MyBatis安装&入门
    MyBatis创建在pom.xml中添加依赖<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency>&l......
  • MyBatis-Plus学习
    一、MyBatis-Plus简介1、简介MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。2、特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对......
  • Python 初学笔记
    1.注释:与c和cpp不一样,python的注释不是//或者/**/,而是#.....  //单行注释多行注释"""......."""                         //多行注释type()     //查看数据的类型,在括号里面填入查看数据的信息数据类型转......
  • Django学习笔记
    1、安装djangopipinstall-Udjango#安装django 2、创建django工程、启动工程创建项目django-adminstartprojectdjango_test #安装完django后会有django-admin命令#django_test是项目名称,创建项目时修改为自己的项目名称即可启动项目项目创建完成后,会在执行命令......
  • PMP学习笔记(四)
      敏捷实践指南预习  《敏捷实践指南》关注项目,解决项目生命周期选择、实施敏捷方法和组织对敏捷项目的考虑因素。  传统预测法旨在预先确定大部分需求,并通过变更请求过程控制变更,而敏捷方法的出现是为了在短时间内探讨可行性,根据评估和反馈快速调整。  一般而言,......