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

MyBatis實現(xiàn)表連接查詢寫法(三種對應關系)的方法總結

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

前言

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

表連接查詢

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

按對應關系可分為:

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

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

一對一關系

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

一個人對應一本護照,同時一本護照對應一個人,而且人不一定有護照,有護照一定會有人存在。
因此外鍵應設在護照表中,那么就該創(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)建非常符合表之間的邏輯關系,但是創(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;
}

那實際做項目時應該如何取舍?答案是根據需求:

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

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

在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 標簽用于一對一關系:

  • 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(打印方法)

運行結果:

一對多關系

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

用戶可以下多個訂單,一個訂單對應一個用戶,這就是一種一對多關系。

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

// 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ū)別就在于使用的標簽不同:

collection 標簽:

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

測試結果:

多對多關系

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

一個學生可以選多個課程,而一個課程可以被多個學生選擇,這就是典型的多對多關系。

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

<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>

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

相關文章

  • Spring中的spring-retry重試機制解析

    Spring中的spring-retry重試機制解析

    這篇文章主要介紹了Spring中的spring-retry重試機制解析,spring-retry可以通過注解,在不入侵原有業(yè)務邏輯代碼的方式下,優(yōu)雅的實現(xiàn)重處理功能,在spring-retry中,所有配置都是基于簡單注釋的,需要的朋友可以參考下
    2024-01-01
  • java中常用XML解析器的使用

    java中常用XML解析器的使用

    這篇文章主要介紹了java中常用XML解析器的使用的相關資料,需要的朋友可以參考下
    2023-02-02
  • Java基礎之堆內存溢出的解決

    Java基礎之堆內存溢出的解決

    這篇文章主要介紹了Java基礎之堆內存溢出的解決,文中有非常詳細的圖文示例及代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java動態(tài)驗證碼單線設計的兩種方法

    Java動態(tài)驗證碼單線設計的兩種方法

    這篇文章主要介紹了Java動態(tài)驗證碼單線設計的兩種方法,需要的朋友可以參考下
    2018-07-07
  • 基于Java手寫一個好用的FTP操作工具類

    基于Java手寫一個好用的FTP操作工具類

    網上百度了很多FTP的java?工具類,發(fā)現(xiàn)文章代碼都比較久遠,且代碼臃腫,即使搜到了代碼寫的還可以的,封裝的常用操作方法不全面。所以本文將手寫一個好用的Java?FTP操作工具類,需要的可以參考一下
    2022-04-04
  • Java設計模式探究之觀察者模式詳解

    Java設計模式探究之觀察者模式詳解

    這篇文章主要為大家詳細介紹了JAVA的觀察者模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-08-08
  • 如何對jdk版本升級或降級

    如何對jdk版本升級或降級

    這篇文章主要介紹了如何對jdk版本升級或降級方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringCloudGateway網關處攔截并修改請求的操作方法

    SpringCloudGateway網關處攔截并修改請求的操作方法

    這篇文章主要介紹了SpringCloudGateway網關處攔截并修改請求的操作方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • Java?中向?Arraylist?添加對象的示例代碼

    Java?中向?Arraylist?添加對象的示例代碼

    本文介紹了如何在 Java 中向 ArrayList 添加對象,并提供了示例和注意事項,通過掌握這些知識,讀者可以在自己的 Java 項目中有效地使用 ArrayList 來存儲和操作對象,需要的朋友可以參考下
    2023-11-11
  • Java 中 Form表單數據的兩種提交方式

    Java 中 Form表單數據的兩種提交方式

    本文給大家分享java中form表單數據的兩種提交方式,分別是get從制定的服務器中獲取數據,pos方式提交數據給指定的服務器處理,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2016-12-12

最新評論

枣强县| 津市市| 新安县| 五台县| 封丘县| 聂拉木县| 双鸭山市| 彰化县| 芜湖县| 上犹县| 池州市| 博兴县| 株洲市| 沅陵县| 凤山县| 澄城县| 莱州市| 盘山县| 虞城县| 阜南县| 涿鹿县| 绵竹市| 安阳市| 棋牌| 塔城市| 阜平县| 镇安县| 夹江县| 浙江省| 蓝山县| 贡山| 宣城市| 云安县| 武乡县| 汉寿县| 泾源县| 辽阳县| 田阳县| 清徐县| 三门县| 乐昌市|