首页 > 其他分享 >mybatis的级联查询

mybatis的级联查询

时间:2023-10-10 10:27:00浏览次数:32  
标签:级联 标签 配置 resultMap 查询 mybatis association

级联是在resultMap标签中配置。级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多会增加系统的复杂度,同事降低系统的性能,次增彼减,所以记录超过3层时,就不要考虑使用级联了,因为这样会造成多个对象的关联,导致系统的耦合、负载和难以维护。
  MyBatis中的级联分2种:
  1.一对一(association)
  2.一对多(collection)

一、一对一

  A表一对一B表情况下A对象当中有外键关联的B表的对象作为属性,A对象中有一个B对象属性。当查A对象时,如果想把B对象属性同时获取,有三种方式。

  三种方式:

  1、多表联合查询,即A表和B表联合查询,同事查出A、B表的字段,然后配置resultMap标签。

    resultMap标签的配置如下:

    

复制代码
 1 <resultMap id="AResultMap" type="com.A" >
 2     <id column="A_ID" property="AId" jdbcType="INTEGER" />
 3     <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" />
 4     <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" />
 5     <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" />
 6 <!-- 一下是对A对象中B的属性的映射配置 -->
 7 <result column="B_id" property="b.BId"/>
 8     <result column="ONLINE_DATE" property="b.onlineDate"/>
 9     <result column="LAST_COMM_TIME" property="b.lastCommTime"/>
10     <result column="STATUS_CODE" property="b.statusCode"/>
11 </resultMap>
复制代码

  2、多表联合查询,即A表和B表联合查询,同事查出A、B表的字段,然后通过association标签配置resultMap标签。

    resultMap标签的配置如下:

    

复制代码
<resultMap id="AResultMap" type="com.A" >
      <id column="A_ID" property="AId" jdbcType="INTEGER" />
      <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" />
      <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" />
      <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" />
  <!-- 一下是对A对象中B的属性的映射配置 -->
   <association property="b" javaType="com.B">
        <id column="B_id" property="bId"/>
        <result column="ONLINE_DATE" property="onlineDate"/>
        <result column="LAST_COMM_TIME" property="lastCommTime"/>
        <result column="STATUS_CODE" property="statusCode"/>
    </association> 
 </resultMap>
复制代码

  3、只查询A表字段,然后通过外键调用查询B表的select标签查询B表对象,通过association标签配置resultMap标签。

    resultMap标签的配置如下:

    

复制代码
1 <resultMap id="AResultMap" type="com.A" >
2       <id column="A_ID" property="AId" jdbcType="INTEGER" />
3       <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" />
4       <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" />
5       <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" />
6   <!-- 一下是对A对象中B的属性的映射配置 -->
7    <association property="b" column="B_ID" select="com.BMapper.selectBById"/>
8  </resultMap>
复制代码

  第三种方式只需要单表查询,但需要分别查询A表和B表,通过外键调用B表的select。association标签中调用的B表的select不通过BMapper的接口,因此在BMapper文件对应的接口中可以不写selectBById方法。

二、一对多

  B一对多A只需在resultMap标签中配置association标签即可。

  

<resultMap type="B" id="getB">
            <result property="Bid" column="Bid" />
           <collection property="AList" column="Bid" javaType="list" select="getAListByBid"/>
</resultMap>

标签:级联,标签,配置,resultMap,查询,mybatis,association
From: https://www.cnblogs.com/zhangsai/p/17753912.html

相关文章

  • LntonGBS针对数据库删除级联数据后的无效数据进行的优化
    LntonGBS国标视频云服务可支持通过国标GB28181协议将设备接入,实现视频的实时监控直播、录像、语音对讲、云存储、告警、级联等功能,同时也支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。同时LntonGBS平台也支持海康Ehome协议及SDK......
  • windows查询进程启动时间
    1.打开运行输入"msinfo32" 2.选择"软件环境"再点击"正在运行任务"即可看到正在运行的进程的启动时间如下所示 ......
  • 查询学霸积分榜的接口声明
        ......
  • 【Mybatis】model类通过注解忽略某属性
    当使用的model类中需要新增一些字段仅用于程序中传参,而不需要添加到数据库表中时,可以通过添加@Transient注解使mybatis忽略它而不做对应关系。例如:@TransientprivateStringuserConfig;如果是使用的mybatisplus,需要使用@TableField(exist=false)注解,表示表中不存在......
  • MongoDB常用查询
    1.数据库数据说明#集合:school#文档:stu#结合字段:id,学号、姓名、电话、性别、年龄、学历、备注#初始化20条数据useschoolfor(varnum=1;num<=20;num++){db.stu.insert({id:num,no:"SN"+num,name:"name"+num,tel:"111......
  • Oracle和达梦:连接多行查询结果
    Oracle和达梦:LISTAGG连接查询结果LISTAGG介绍使用LISTAGG函数,您可以将多行数据连接成一个字符串,并指定分隔符进行分隔。这在需要将多行数据合并为单个字符串的情况下非常有用,例如将多个值合并为逗号分隔的列表。函数介绍LISTAGG(column,delimiter)WITHINGROUP(ORDER......
  • 查询手机号所属地,支持多种查询方式的API接口
    在现代社会,手机号已经成为人们生活和工作中不可缺少的一部分。而一个手机号可以初步反映出该号码的归属地信息。因此,查询手机号所属地已经成为人们日常生活中的常见需求。本篇文章将通过介绍一个支持多种查询方式的API接口来帮助读者更好地了解查询手机号所属地的相关知识。 ......
  • sql查询实战代码
    <selectid="workPage"resultType="com.shsajt.db.model.ContractWork"> select*fromcontract_workcw leftjoincontract_itemcioncw.item_id=ci.id leftjoinclosed_loopcloncw.id=cl.work_id <where> cw.delet......
  • Golang 使用SQLX实现可选条件查询
    packagemainimport( "fmt" "log" _"github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx")typeCityQuerystruct{ querystring optscityQueryOptions params[]any}typecityQueryOptionsstruct{......
  • 点赞功能改进-改造查询点赞状态接口
               ......