最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis中嵌套查詢的使用解讀

 更新時(shí)間:2023年03月15日 10:38:04   作者:jamesluozhiwei  
這篇文章主要介紹了mybatis中嵌套查詢的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis嵌套查詢的使用

在使用mybatis時(shí),當(dāng)我們遇到表與表之之間存在關(guān)聯(lián)的時(shí)候,就可以使用嵌套查詢

比如說

當(dāng)一個(gè)對(duì)象包含了另一個(gè)對(duì)象

/**
 * 公交實(shí)體類中包含了司機(jī)信息和路線信息
 */
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;//司機(jī)

    private Way way;//路線
    //省略封裝方法
 }

當(dāng)一個(gè)對(duì)象中包含另一個(gè)對(duì)象的泛型集合

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;
    //省略封裝方法
 }

當(dāng)一個(gè)對(duì)象中包含了另外一個(gè)對(duì)象時(shí),在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屬性中指向需要調(diào)用哪個(gè)sql執(zhí)行(可以指向其它命名空間的,比如:com.whx.bus.mapper.WayMapper.selectByPrimaryKey)-->
    <!-- 在column屬性中指定需傳遞給子查詢的參數(shù) -->
    <!-- 在property屬性中指定Java對(duì)象中的變量名 -->
    <!-- 在javaType屬性中指定當(dāng)前對(duì)象的限定名(如果是集合的話就是ofType) -->
    <association property="driver" column="driverId" javaType="com.whx.bus.entity.Driver" select="selectDriverById">
    </association>
    <!-- 在select屬性中指向需要調(diào)用哪個(gè)sql執(zhí)行(可以指向其它命名空間的,比如:com.whx.bus.mapper.WayMapper.selectByPrimaryKey)-->
    <!-- 在column屬性中指定需傳遞給子查詢的參數(shù) -->
    <!-- 在property屬性中指定Java對(duì)象中的變量名 -->
    <!-- 在javaType屬性中指定當(dāng)前對(duì)象的限定名(如果是集合的話就是ofType) -->
    <association property="way" column="wayId" javaType="com.whx.bus.entity.Way" select="selectWayById">
    </association>
  </resultMap>
  <!-- 司機(jī)結(jié)果集 -->
  <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>
  <!-- 路線結(jié)果集 -->
  <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屬性中指向需要調(diào)用哪個(gè)sql執(zhí)行(可以指向其它命名空間的,比如:com.whx.bus.mapper.WayMapper.selectByPrimaryKey)-->
    <!-- 在column屬性中指定需傳遞給子查詢的參數(shù) -->
    <!-- 在property屬性中指定Java對(duì)象中的變量名 -->
    <!-- 在ofType屬性中指定泛型集合對(duì)應(yīng)的對(duì)象的限定名(如果是單個(gè)對(duì)象的話就是javaType) -->
    <collection property="stations" ofType="com.whx.bus.entity.Station" column="id" javaType="java.util.ArrayList" select="selectStationsByWay">
    </collection>
  </resultMap>
  <!-- 站點(diǎn)結(jié)果集 -->
  <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>

  <!-- 通過路線獲取站點(diǎn)信息 -->
  <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>
  <!-- 通過司機(jī)id查詢司機(jī)信息 -->
  <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的嵌套查詢之后,調(diào)用自己的查詢只要調(diào)用相應(yīng)的resultMap之后就可以了,執(zhí)行查詢之后就會(huì)自己會(huì)調(diào)用子查詢(注意:子查詢其實(shí)也是對(duì)應(yīng)一個(gè)查詢語句,也要有相應(yīng)的結(jié)果集)。

附上一個(gè)查詢結(jié)果的debug

從圖中也是可以看出Bus中的Way對(duì)象是有數(shù)據(jù)的,并且Way中的泛型集合stations也是有數(shù)據(jù)的,這是因?yàn)樽硬樵冎械慕Y(jié)果集也配置了嵌套查詢,所以相對(duì)于嵌套了兩次~

如果使用多個(gè)嵌套需要額外注意,在多對(duì)多的情況下,切勿嵌套死循環(huán)了,不然就尷尬了~233

需要嵌套對(duì)象還是集合就根據(jù)自己的需求來了,注意單個(gè)對(duì)象是association、集合是collection(屬性在代碼中有說明)

還有一個(gè)點(diǎn)需要注意的就是:如果配置了嵌套了,在原查詢語句中就不要查嵌套的表了,只查原表中的就行~不然就會(huì)出錯(cuò)——切記切記

傳遞多個(gè)參數(shù)

如果嵌套查詢需傳遞多個(gè)參數(shù)

<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" />
    <!-- 如果這里需要傳遞一個(gè)card和一個(gè)driverId到子查詢中 -->
    <!-- cardParam表示自查詢中用到的鍵(鍵可自己定義)、card表示當(dāng)前結(jié)果集的card列的值(列根據(jù)上面的結(jié)果集來) -->
    <!-- driverIdParam表示自查詢中用到的鍵(鍵可自己定義)、driverId表示當(dāng)前結(jié)果集的driverId列的值(列根據(jù)上面的結(jié)果集來) -->
    <association property="driver" column="{cardParam=card,driverIdParam=driverId}" javaType="com.whx.bus.entity.Driver" select="selectDriverById">
    </association>
</resultMap>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中Arrays工具類的一些常見方法總結(jié)

    Java中Arrays工具類的一些常見方法總結(jié)

    在Java中Arrays類是一個(gè)實(shí)用工具類,用于在數(shù)組上執(zhí)行各種操作,包括排序、搜索、比較等,這篇文章主要給大家介紹了關(guān)于Java中Arrays工具類的一些常見方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Java動(dòng)態(tài)線程池插件dynamic-tp集成zookeeper

    Java動(dòng)態(tài)線程池插件dynamic-tp集成zookeeper

    ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等
    2023-03-03
  • java如何實(shí)現(xiàn)字符串中的字母排序

    java如何實(shí)現(xiàn)字符串中的字母排序

    這篇文章主要介紹了java如何實(shí)現(xiàn)字符串中的字母排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解SpringIOC容器中bean的作用范圍和生命周期

    詳解SpringIOC容器中bean的作用范圍和生命周期

    這篇文章主要介紹了SpringIOC容器中bean的作用范圍和生命周期,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 如何通過Java實(shí)現(xiàn)修改視頻分辨率

    如何通過Java實(shí)現(xiàn)修改視頻分辨率

    Java除了可以修改圖片的分辨率,還可以實(shí)現(xiàn)修改視頻的分辨率,這篇文章就將帶大家學(xué)習(xí)如果編寫這一工具類,感興趣的同學(xué)可以了解一下
    2021-12-12
  • Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式

    Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式

    當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡(jiǎn)單的對(duì)象,而是多個(gè)位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時(shí)需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)
    2022-02-02
  • Maven  pom.xml與settings.xml詳解

    Maven pom.xml與settings.xml詳解

    這篇文章主要介紹了Maven pom.xml與settings.xml詳解的相關(guān)資料,這里對(duì)pom.xml與setting.xml詳細(xì)的研究說明,需要的朋友可以參考下
    2016-12-12
  • java?Spring?Boot的介紹與初體驗(yàn)

    java?Spring?Boot的介紹與初體驗(yàn)

    大家好,本篇文章主要講的是java?Spring?Boot的介紹與初體驗(yàn),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 入門JDK集合之HashMap解析

    入門JDK集合之HashMap解析

    HashMap---基于哈希表的 Map 接口的實(shí)現(xiàn)。此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用 null 值和 null 鍵。(除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同
    2021-06-06
  • Java用Cookie限制點(diǎn)贊次數(shù)(簡(jiǎn)版)

    Java用Cookie限制點(diǎn)贊次數(shù)(簡(jiǎn)版)

    最近做了一個(gè)項(xiàng)目,其中有項(xiàng)目需求是,要用cookie實(shí)現(xiàn)限制點(diǎn)贊次數(shù),特此整理,把實(shí)現(xiàn)代碼分享給大家供大家學(xué)習(xí)
    2016-02-02

最新評(píng)論

凤阳县| 宁城县| 黎城县| 玛沁县| 呼和浩特市| 天柱县| 上蔡县| 札达县| 三台县| 扶沟县| 同心县| 盱眙县| 饶河县| 苏尼特右旗| 柘城县| 兴化市| 和田市| 甘南县| 安康市| 乐昌市| 交口县| 邓州市| 辽中县| 黎平县| 家居| 德庆县| 盘锦市| 尉氏县| 岐山县| 宁晋县| 醴陵市| 喀什市| 桑日县| 肇州县| 全椒县| 古浪县| 广灵县| 阳朔县| 商都县| 进贤县| 长顺县|