iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >mybatis中的嵌套查询如何使用
  • 758
分享到

mybatis中的嵌套查询如何使用

2023-07-05 12:07:01 758人浏览 独家记忆
摘要

今天小编给大家分享一下mybatis中的嵌套查询如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。mybatis嵌套查询

今天小编给大家分享一下mybatis中的嵌套查询如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

mybatis嵌套查询的使用

在使用mybatis时,当我们遇到表与表之之间存在关联的时候,就可以使用嵌套查询

比如说

当一个对象包含了另一个对象

public class Bus implements Serializable {    private Integer id;    private String card;    private Integer driverid;    private Integer wayid;    private Double price;    private Date topen;    private Date tclose;    private Driver driver;//司机    private Way way;//路线    //省略封装方法 }

当一个对象中包含另一个对象的泛型集合

public class Way implements Serializable {    private Integer id;    private String name;    private Date topen;    private Date tclose;    private List<Station> stations;    private String topenString;    private String tcloseString;    //省略封装方法 }

当一个对象中包含了另外一个对象时,在resultMap中就可以使用嵌套查询

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "Http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.whx.bus.mapper.BusMapper" >  <resultMap id="BaseResultMap" type="com.whx.bus.entity.Bus" >    <id column="id" property="id" jdbcType="INTEGER" />    <result column="card" property="card" jdbcType="VARCHAR" />    <result column="driverId" property="driverid" jdbcType="INTEGER" />    <result column="wayId" property="wayid" jdbcType="INTEGER" />    <result column="price" property="price" jdbcType="DOUBLE" />    <result column="topen" property="topen" jdbcType="TIMESTAMP" />    <result column="tclose" property="tclose" jdbcType="TIMESTAMP" />    <!-- 在select属性中指向需要调用哪个sql执行(可以指向其它命名空间的,比如:com.whx.bus.mapper.WayMapper.selectByPrimaryKey)-->    <!-- 在column属性中指定需传递给子查询的参数 -->    <!-- 在property属性中指定Java对象中的变量名 -->    <!-- 在javaType属性中指定当前对象的限定名(如果是集合的话就是ofType) -->    <association property="driver" column="driverId" javaType="com.whx.bus.entity.Driver" select="selectDriverById">    </association>    <!-- 在select属性中指向需要调用哪个sql执行(可以指向其它命名空间的,比如:com.whx.bus.mapper.WayMapper.selectByPrimaryKey)-->    <!-- 在column属性中指定需传递给子查询的参数 -->    <!-- 在property属性中指定Java对象中的变量名 -->    <!-- 在javaType属性中指定当前对象的限定名(如果是集合的话就是ofType) -->    <association property="way" column="wayId" javaType="com.whx.bus.entity.Way" select="selectWayById">    </association>  </resultMap>  <!-- 司机结果集 -->  <resultMap id="DriverResultMap" type="com.whx.bus.entity.Driver">    <id column="id" property="id" jdbcType="INTEGER" />    <result column="name" property="name" jdbcType="VARCHAR" />    <result column="driver_card" property="driverCard" jdbcType="VARCHAR" />    <result column="mobile" property="mobile" jdbcType="VARCHAR" />  </resultMap>  <!-- 路线结果集 -->  <resultMap id="WayResultMap" type="com.whx.bus.entity.Way">    <id column="id" property="id" jdbcType="INTEGER" />    <result column="name" property="name" jdbcType="VARCHAR" />    <result column="topen" property="topen" jdbcType="TIMESTAMP" />    <result column="tclose" property="tclose" jdbcType="TIMESTAMP" />    <result column="topenString" property="topenString" jdbcType="VARCHAR" />    <result column="tcloseString" property="tcloseString" jdbcType="VARCHAR" />    <!-- 在select属性中指向需要调用哪个sql执行(可以指向其它命名空间的,比如:com.whx.bus.mapper.WayMapper.selectByPrimaryKey)-->    <!-- 在column属性中指定需传递给子查询的参数 -->    <!-- 在property属性中指定Java对象中的变量名 -->    <!-- 在ofType属性中指定泛型集合对应的对象的限定名(如果是单个对象的话就是javaType) -->    <collection property="stations" ofType="com.whx.bus.entity.Station" column="id" javaType="java.util.ArrayList" select="selectStationsByWay">    </collection>  </resultMap>  <!-- 站点结果集 -->  <resultMap id="StationResultMap" type="com.whx.bus.entity.Station" >    <id column="id" property="id" jdbcType="INTEGER" />    <result column="name" property="name" jdbcType="VARCHAR" />  </resultMap>  <!-- 通过主键获取公交信息 -->  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >    select     <include refid="Base_Column_List" />    from bus    where id = #{id,jdbcType=INTEGER}  </select>  <!-- 通过路线获取站点信息 -->  <select id="selectStationsByWay" parameterType="java.lang.Integer" resultMap="StationResultMap">    select station.* from station inner join way_station on station.id = way_station.stationId where way_station.wayId = #{value}  </select>  <!-- 通过司机id查询司机信息 -->  <select id="selectDriverById" parameterType="java.lang.Integer" resultMap="DriverResultMap">    select driver.* from driver where id = #{value}  </select>  <!-- 通过路线id查询路线信息 -->  <select id="selectWayById" parameterType="java.lang.Integer" resultMap="WayResultMap">    select way.* from way where id = #{value}  </select></mapper>

配置了resultMap的嵌套查询之后,调用自己的查询只要调用相应的resultMap之后就可以了,执行查询之后就会自己会调用子查询(注意:子查询其实也是对应一个查询语句,也要有相应的结果集)。

附上一个查询结果的debug

mybatis中的嵌套查询如何使用

从图中也是可以看出Bus中的Way对象是有数据的,并且Way中的泛型集合stations也是有数据的,这是因为子查询中的结果集也配置了嵌套查询,所以相对于嵌套了两次~

如果使用多个嵌套需要额外注意,在多对多的情况下,切勿嵌套死循环了,不然就尴尬了~233

需要嵌套对象还是集合就根据自己的需求来了,注意单个对象是association、集合是collection(属性在代码中有说明)

还有一个点需要注意的就是:如果配置了嵌套了,在原查询语句中就不要查嵌套的表了,只查原表中的就行~不然就会出错切记切记

传递多个参数

如果嵌套查询需传递多个参数

<resultMap id="BaseResultMap" type="com.whx.bus.entity.Bus" >    <id column="id" property="id" jdbcType="INTEGER" />    <result column="card" property="card" jdbcType="VARCHAR" />    <result column="driverId" property="driverid" jdbcType="INTEGER" />    <result column="wayId" property="wayid" jdbcType="INTEGER" />    <result column="price" property="price" jdbcType="DOUBLE" />    <result column="topen" property="topen" jdbcType="TIMESTAMP" />    <result column="tclose" property="tclose" jdbcType="TIMESTAMP" />    <!-- 如果这里需要传递一个card和一个driverId到子查询中 -->    <!-- cardParam表示自查询中用到的键(键可自己定义)、card表示当前结果集的card列的值(列根据上面的结果集来) -->    <!-- driverIdParam表示自查询中用到的键(键可自己定义)、driverId表示当前结果集的driverId列的值(列根据上面的结果集来) -->    <association property="driver" column="{cardParam=card,driverIdParam=driverId}" javaType="com.whx.bus.entity.Driver" select="selectDriverById">    </association></resultMap>

以上就是“mybatis中的嵌套查询如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: mybatis中的嵌套查询如何使用

本文链接: https://www.lsjlt.com/news/351699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis中的嵌套查询如何使用
    今天小编给大家分享一下mybatis中的嵌套查询如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。mybatis嵌套查询...
    99+
    2023-07-05
  • mybatis中嵌套查询的使用解读
    目录mybatis嵌套查询的使用传递多个参数总结mybatis嵌套查询的使用 在使用mybatis时,当我们遇到表与表之之间存在关联的时候,就可以使用嵌套查询 比如说 当一个对象包含...
    99+
    2023-03-15
    mybatis嵌套查询 嵌套查询使用 mybatis查询
  • mybatis使用collection嵌套查询的实现
    在开发中,可能会遇到一对多的关系,这个时候,一条sql语句就难以胜任这个任务了。只能先执行一条sql,然后根据返回的结果,再做一次sql关联查询,这个时候,使用mybatis的col...
    99+
    2024-04-02
  • MyBatis的嵌套查询解析
    Mybatis表现关联关系比hibernate简单,没有分那么细致one-to-many、many-to-one、one-to-one。而是只有两种association(一)、collection(多),表现很简洁。下面通过一个实例,来展...
    99+
    2023-05-31
    mybatis 嵌套 查询
  • mybatis嵌套查询和嵌套结果的区别是什么
    本篇内容介绍了“mybatis嵌套查询和嵌套结果的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mybatis嵌套查询和嵌套结果有...
    99+
    2023-07-05
  • MyBatis中一对多的xml配置方式(嵌套查询/嵌套结果)
    目录MyBatis一对多的xml配置嵌套查询嵌套结果一对多关联查询xml配置写法  情景概述创建表对应 java Pojo查询 客户表client 获取客户名下的附件信息查...
    99+
    2024-04-02
  • mybatis之嵌套查询和嵌套结果有哪些区别
    目录mybatis嵌套查询和嵌套结果有啥区别嵌套查询的弊端:即嵌套查询的N+1问题嵌套结果查询探索嵌套查询和嵌套结果这对孪生子的秘密!!!总结mybatis嵌套查询和嵌套结果有啥区别...
    99+
    2023-03-15
    mybatis嵌套查询 mybatis嵌套结果 嵌套查询和嵌套结果区别
  • SQL 嵌套查询的具体使用
    目录插入数据  select子查询(外语句先执行,内语句后执行)总结嵌套查询又称子查询,有select子查询,where子查询,from子查询,exists子查询。 插入数据&nb...
    99+
    2023-01-28
    SQL嵌套查询
  • SQL嵌套查询的具体使用
    目录插入数据  select子查询(外语句先执行,内语句后执行)总结嵌套查询又称子查询,有select子查询,where子查询,from子查询...
    99+
    2023-01-28
    SQL 嵌套查询
  • Mybatis的collection三层嵌套查询怎么写
    这篇“Mybatis的collection三层嵌套查询怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis的c...
    99+
    2023-07-05
  • 如何使用sql查询嵌套的数据类型
    本篇内容介绍了“如何使用sql查询嵌套的数据类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!【问题详细描...
    99+
    2024-04-02
  • Java之Mybatis多层嵌套查询方式
    目录Mybatis多层嵌套查询表的存储sql文件实体类XMLMybatis多层嵌套查询(多对多)依赖实体类Setmeal实体类CheckGroup实体类CheckItemmapper...
    99+
    2024-04-02
  • mybatis 集合嵌套查询和集合嵌套结果的区别说明
    目录集合嵌套查询和集合嵌套结果的区别1.创建2张表,建立主外键关系2.建立实体类3.修改配置文件4.建立映射文件5.创建测试类MyBatis 嵌套查询解析对应的JavaBean对应的...
    99+
    2024-04-02
  • Mybatis关联查询结果集对象嵌套的具体使用
    在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标签,本文适合有一定Mybatis基础的读者查阅 数...
    99+
    2024-04-02
  • mybatis一对多嵌套查询怎么实现
    本文小编为大家详细介绍“mybatis一对多嵌套查询怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis一对多嵌套查询怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。mybatis一对多嵌...
    99+
    2023-07-05
  • Ent 查询中的嵌套聚合
    php小编苹果在本文中将为大家介绍“Ent 查询中的嵌套聚合”。在数据查询和分析中,嵌套聚合是一种强大的技术,可以在一个查询中进行多个层级的聚合操作。通过使用嵌套聚合,我们可以更加灵活...
    99+
    2024-02-09
  • Mysql中的嵌套子查询问题
    目录Mysql嵌套子查询在WHERE子句中使用子查询单行单列子查询单行多列子查询。多行单列子查询FROM子查询:总结:select子查询用子查询用子查询Mysql嵌...
    99+
    2024-04-02
  • mongodb多层嵌套查询如何实现
    在MongoDB中,多层嵌套查询可以通过使用“点符号”来访问嵌套的字段。下面是一个示例,用于说明如何实现多层嵌套查询: 假设我们有一...
    99+
    2024-04-11
    mongodb
  • Mybatis的collection三层嵌套查询方式(验证通过)
    目录Mybatis collection三层嵌套查询一般情况下,我们都是两层的嵌套找到一个方案实体类的映射关系SQL映射关系如下解析如下总结Mybatis collection三层嵌...
    99+
    2023-03-15
    Mybatis collection collection三层嵌套查询 collection嵌套查询
  • 详解mybatis中的if-else的嵌套使用
    目录案例一:if-else案例二:if嵌套MyBatis中if和choose的嵌套案例一:if-else 在mybatis的使用过程中,难免会存在使用if-else的逻辑,但是实际是...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作