亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis實現(xiàn)表連接查詢寫法(三種對應(yīng)關(guān)系)的方法總結(jié)

 更新時間:2023年01月28日 09:36:41   作者:微涼秋意  
這篇文章主要介紹了MyBatis實現(xiàn)表連接查詢寫法(一對一關(guān)系、一對多關(guān)系、多對多關(guān)系)的方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下

前言

上篇博文把基礎(chǔ)部分記錄了,本篇是對 表連接查詢 中一對一,一對多,多對多關(guān)系寫法區(qū)別的記錄總結(jié)。

表連接查詢

前提最少是兩張表,其中的子表設(shè)有外鍵

按對應(yīng)關(guān)系可分為:

  • 一對一
  • 一對多
  • 多對多

對于主外鍵的關(guān)系搞不清楚的可以參考我以往的博文:mysql一點通

一對一關(guān)系

有如下兩張表格,t_people(人)與t_passport(護照):

一個人對應(yīng)一本護照,同時一本護照對應(yīng)一個人,而且人不一定有護照,有護照一定會有人存在。
因此外鍵應(yīng)設(shè)在護照表中,那么就該創(chuàng)建類了:

// Passport:
public class Passport {
    private Integer passportId;
    private String passportSerial;
}
// People
public class People {
    private Integer peopleId;
    private String  peopleName;
    private Passport passport;
}

這樣創(chuàng)建非常符合表之間的邏輯關(guān)系,但是創(chuàng)建方式并不唯一。

在Passport類中添加People屬性也是可以的,即:

// Passport
public class Passport {
    private Integer passportId;
    private String passportSerial;
    private People people;
}
// People
public class People {
    private Integer peopleId;
    private String  peopleName;
}

那實際做項目時應(yīng)該如何取舍?答案是根據(jù)需求:

  • 如果是查詢公民以及其對應(yīng)的護照信息,那就用前者
  • 如果是查詢所有護照以及持有者的信息,那就用后者
  • 因此在設(shè)計類時不要太死板,兩種方法需要斟酌后選擇

這里以查詢公民以及其對應(yīng)的護照信息為例,編寫項目:

在mapper接口定義方法:

public interface PeopleMapper {
    List<People> selectAll();
}

在xml中編寫sql:

<mapper namespace="com.qj.mapper.PeopleMapper">
    <resultMap id="peopleMap" type="People">
        <id property="peopleId" column="people_id"/>
        <result property="peopleName" column="people_name"/>
        <association property="passport" javaType="Passport">
            <id property="passportId" column="passport_id"/>
            <result property="passportSerial" column="passport_serial"/>
        </association>
    </resultMap>

    <select id="selectAll" resultMap="peopleMap">
        select *
        from t_people t1
                 left join t_passport t2 on t1.people_id = t2.people_id
    </select>
</mapper>

重點在于resultMap里的寫法:

association 標(biāo)簽用于一對一關(guān)系:

  • propetry 后寫屬性名
  • javaType 后寫該屬性所屬類的類型

編寫測試類:

public static void main(String[] args) {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    PeopleMapper mapper = sqlSession.getMapper(PeopleMapper.class);
    mapper.selectAll().forEach(System.out::println);
    MybatisUtil.closeSqlSession(sqlSession);
}

這段代碼:mapper.selectAll().forEach(System.out::println); 中的寫法是在JDK1.8之后有的:

格式:集合.foreach(打印方法)

運行結(jié)果:

一對多關(guān)系

有如下兩張表格,t_user(用戶),t_order(訂單):

用戶可以下多個訂單,一個訂單對應(yīng)一個用戶,這就是一種一對多關(guān)系。

查詢用戶及其所有訂單信息:

// Order
public class Order {
    private Integer orderId;
    private String orderName;
}
// User
public class User {
    private Integer uId;
    private String userName;
    private String userPwd;
    private List<Order> orders;
}

xml文件的寫法:

<mapper namespace="com.qj.mapper.UserMapper">
    <resultMap id="userMap" type="User">
        <id property="uId" column="u_id"/>
        <result property="userName" column="u_username"/>
        <result property="userPwd" column="u_pwd"/>
        <collection property="orders" javaType="java.util.List" ofType="Order">
            <id property="orderId" column="order_id"/>
            <result property="orderName" column="order_name"/>
        </collection>
    </resultMap>

    <select id="selectAll" resultMap="userMap">
        select *
        from t_user t1
                 left join t_order t2
                           on t1.u_id = t2.user_id
    </select>

</mapper>

這里與一對一的區(qū)別就在于使用的標(biāo)簽不同:

collection 標(biāo)簽:

  • property后寫屬性名
  • javaType后寫集合類型
  • ofType后寫泛型的類型

測試結(jié)果:

多對多關(guān)系

有以下三張表格,表示了學(xué)生的選課情況:

一個學(xué)生可以選多個課程,而一個課程可以被多個學(xué)生選擇,這就是典型的多對多關(guān)系。

而 多對多 與 一對多 關(guān)系在xml文件中resultMap的寫法幾乎一致,因此不做過多解釋,看一下sql 語句與測試結(jié)果即可:

<select id="selectAll" resultMap="stuMap">
        select *
        from t_stu t1
                 left join t_sc t2 on t1.stu_id = t2.s_id
                 left join t_course t3 on t3.course_id = t2.c_id
    </select>

到此這篇關(guān)于MyBatis實現(xiàn)表連接查詢寫法(三種對應(yīng)關(guān)系)的方法總結(jié)的文章就介紹到這了,更多相關(guān)MyBatis表連接查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何基于java隨機獲取不重復(fù)數(shù)值

    如何基于java隨機獲取不重復(fù)數(shù)值

    這篇文章主要介紹了如何基于java隨機獲取不重復(fù)數(shù)值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Java 線程優(yōu)先級詳解及實例

    Java 線程優(yōu)先級詳解及實例

    這篇文章主要介紹了Java 線程優(yōu)先級詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Python爬蟲 12306搶票開源代碼過程詳解

    Python爬蟲 12306搶票開源代碼過程詳解

    這篇文章主要介紹了Python爬蟲 12306搶票開源代碼過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個性修改SpringBoot項目的啟動banner的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 學(xué)習(xí)Java的9張思維導(dǎo)圖

    學(xué)習(xí)Java的9張思維導(dǎo)圖

    這篇文章主要為大家詳細(xì)介紹了學(xué)習(xí)Java的9張思維導(dǎo)圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Spring如何基于aop實現(xiàn)操作日志功能

    Spring如何基于aop實現(xiàn)操作日志功能

    這篇文章主要介紹了Spring如何基于aop實現(xiàn)操作日志功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • java正則實現(xiàn)各種日期格式化

    java正則實現(xiàn)各種日期格式化

    本文給大家分享的是使用java結(jié)合正則表達(dá)式來實現(xiàn)各種日期的格式化功能,代碼非常的簡單,有需要的小伙伴可以參考下。
    2015-05-05
  • springboot遠(yuǎn)程debug調(diào)試全過程

    springboot遠(yuǎn)程debug調(diào)試全過程

    這篇文章主要介紹了springboot遠(yuǎn)程debug調(diào)試全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java的幾種定時器的具體使用(4種)

    java的幾種定時器的具體使用(4種)

    本文主要介紹了4種類型的定時器:@Scheduled注解、quartz、new Timer().schedule、使用線程控制的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • springboot如何根據(jù)配置屏蔽接口返回字段

    springboot如何根據(jù)配置屏蔽接口返回字段

    這篇文章主要介紹了springboot如何根據(jù)配置屏蔽接口返回字段問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論