Mybatis使用Collection属性的示例代码

 更新时间:2023年07月24日 09:54:10   作者:保加利亚的风  
本文主要介绍了Mybatis使用Collection属性的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

这篇文章实现一下不使用left join等连接关键字来实现Mybatis的联表查询功能。包括json类型数据映射到Java实体类中。

库表

父表db1_json

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zIuG3a9a-1689752532289)(C:\Users\Admin\AppData\Roaming\marktext\images\2023-07-19-15-19-09-image.png)]

子表db1_json_attach,子表parent_id对应副本的id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMlft32m-1689752532290)(C:\Users\Admin\AppData\Roaming\marktext\images\2023-07-19-15-19-47-image.png)]

实体类

新建Db1JsonDTO数据传递对象实体。

@Data
public class Db1JsonDTO {
    //父表id
    private Long id;
    //父表信息
    private JSONObject info;
    //子表数据
    private List<Db1JsonAttach> attaches;
}

查看子表实体属性

@TableName(value ="db1_json_attach")
@Data
public class Db1JsonAttach implements Serializable {
    private Long parentId;
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    @TableField(typeHandler = JacksonTypeHandler.class)
    private JSONObject info;
    private static final long serialVersionUID = 1L;
}

Mapper.xml

父xml处理,sql没什么好看的,看一下<resultMap>中各个属性吧。

<resultMap id="Db1JsonDTOResultMap" type="com.it.dto.Db1JsonDTO">
    <result column="info" property="info" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
    <collection property="attaches" column="{parentId = id}"
                select="com.it.mapper.Db1JsonAttachMapper.getAttachList"/>
</resultMap>
<select id="selectDb1JsonList" resultMap="Db1JsonDTOResultMap">
    select id,info from db1_json
</select>
  • id:自定义id,在SQL查询后使用resultMap属性并指定id返回。
  • type:返回字段对应的实体类,也可以是DTO,实体需要有Getter、Setter方法。
  • <result column:数据库中的字段名称。
  • <result property:与数据库字段对应的属性名。
  • <result typeHandler:对特殊类型进行处理,例如当前为json类型,指定将返回的结果进行转化后映射到实体属性中。
  • <collection property:父实体中的list集合数据,即为子实体类的集合。
  • <collection column:id字段赋值,将父id字段赋值给子id。
  • <collection select :指定子xmlSQL查询的方法id。

子xml处理

<resultMap id="BaseResultMap" type="com.it.entity.Db1JsonAttach">
        <id property="parentId" column="parent_id" jdbcType="BIGINT"/>
        <result property="id" column="id" jdbcType="BIGINT"/>
    <result property="info" column="info"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
</resultMap>
<select id="getAttachList" resultMap="BaseResultMap">
    select * from db1_json_attach where parent_id = #{parentId}
</select>

注:Mapper中不需要定义查询方法,只在XML中定义即可。

测试

看一下测试结果

[
  {
    "id": 1681557955655049218,
    "info": {
      "address": "洛杉矶",
      "name": "科比",
      "hobby": "直升机"
    },
    "attaches": [
      {
        "parentId": 1681557955655049218,
        "id": 1681557956250640385,
        "info": {
          "address": "洛杉矶",
          "name": "科比",
          "hobby": "直升机"
        }
      }
    ]
  },
  {
    "id": 1681558109766361089,
    "info": {
      "address": "美国",
      "name": "蔡徐坤",
      "hobby": "唱跳rap篮球"
    },
    "attaches": [
      {
        "parentId": 1681558109766361089,
        "id": 1681558109766361090,
        "info": {
          "address": "美国",
          "name": "蔡徐坤",
          "hobby": "唱跳rap篮球"
        }
      }
    ]
  },
  {
    "id": 1681558181665120257,
    "info": {
      "address": "理塘",
      "name": "丁真",
      "hobby": "测码"
    },
    "attaches": [
      {
        "parentId": 1681558181665120257,
        "id": 1681558181732229122,
        "info": {
          "address": "理塘",
          "name": "丁真",
          "hobby": "测码"
        }
      }
    ]
  }
]

总结

这个方式的联表查询用的不算太多,但是在一些特殊情况可以使用这种方式来完成查询子表的某一下数据集合。

到此这篇关于Mybatis使用Collection属性的示例代码的文章就介绍到这了,更多相关Mybatis Collection属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • RestTemplate发送HTTP POST请求使用方法详解

    RestTemplate发送HTTP POST请求使用方法详解

    这篇文章主要为大家介绍了RestTemplate发送HTTP POST请求的使用方法详解,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步
    2022-03-03
  • SpringBoot详解实现自定义异常处理页面方法

    SpringBoot详解实现自定义异常处理页面方法

    SpringBoot是Spring全家桶的成员之一,是一种整合Spring技术栈的方式(或者说是框架),同时也是简化Spring的一种快速开发的脚手架
    2022-06-06
  • java 使用正则表达式去除前后空格

    java 使用正则表达式去除前后空格

    这篇文章主要介绍了java 使用正则表达式去除前后空格,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • JAVA如何使用Math类操作数据

    JAVA如何使用Math类操作数据

    这篇文章主要介绍了JAVA如何使用Math类操作数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 微信公众平台(测试接口)准备工作

    微信公众平台(测试接口)准备工作

    想要微信开发,首先要有个服务器,但是自己没有。这时候可以用花生壳,将内网映射到公网上,这样就可以在公网访问自己的网站了。
    2016-05-05
  • Spark随机森林实现票房预测

    Spark随机森林实现票房预测

    这篇文章主要为大家详细介绍了Spark随机森林实现票房预测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Springcloud服务注册consul客户端过程解析

    Springcloud服务注册consul客户端过程解析

    这篇文章主要介绍了Springcloud服务注册consul客户端过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot RESTful 应用中的异常处理梳理小结

    SpringBoot RESTful 应用中的异常处理梳理小结

    这篇文章主要介绍了SpringBoot RESTful 应用中的异常处理梳理小结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Kotlin基础教程之数据类型

    Kotlin基础教程之数据类型

    这篇文章主要介绍了Kotlin基础教程之数据类型的相关资料,需要的朋友可以参考下
    2017-05-05
  • 关于 Math.random()生成指定范围内的随机数的公式推导问题

    关于 Math.random()生成指定范围内的随机数的公式推导问题

    在 java 中,用于生成随机数的 Math 方法 random()只能生成 0-1 之间的随机数,而对于生成指定区间,例如 a-b 之间的随机数,却只能用相关计算公式,今天通过本文给大家介绍Math.random()生成随机数的公式推导问题,感兴趣的朋友一起看看吧
    2022-09-09

最新评论