• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Jpa多表關聯查詢

    標簽: jpa

    準備

    一對多關系

    需求:通過ID,查詢學生信息,然后通過學生查詢對應的成績信息
    --實體類
    @Entity
    @Table(name="tb_student")
    public class Student implements Serializable {
       private static final long serialVersionUID = 1L;
    
       @Id
       @GeneratedValue(strategy=GenerationType.IDENTITY)
       @Column(name="student_id")
       private int studentId;
    
       @Column(name="student_name")
       private String studentName;
    
       @Column(name="student_pwd")
       private String studentPwd;
    
       //建立學生與成績的關系,一個學生可以有多門成績,一門成績只能屬于一個學生,一對多的關系。
       //一個學生可以有多成績,所以我們需要使用集合來儲存成績
       @OneToMany
       //不管是什么關系,必須要指定關聯關系的外鍵
       @JoinColumn(name = "student_id")
       private List<Result> results;
      //補全get/set方法
    }
    

    –測試代碼

    //需求:通過ID,查詢學生信息,然后通過學生查詢對應的成績信息
    @Test
    public void findById(){
        //第一步:獲得操作對象
        EntityManager entityManager = JpaUtils.getEntityManager();
        //第二步:操作-查詢
        //查詢學習信息
        Student student = entityManager.find(Student.class, 1);
        System.out.println("學生名:"+student.getStudentName());
        //通過學生的信息找到成績信息
        List<Result> results = student.getResults();
        for (Result result : results) {
            System.out.println("科目:"+result.getResultSubject()+",成績:"+result.getResultScore());
        }
        //第三步:提交關閉
        entityManager.close();
    }
    

    多對一關系

    需求:通過ID,查詢成績信息,然后通過成績查詢對應的學生信息

    –實體類

    @Entity
    @Table(name="tb_result")
    public class Result implements Serializable {
       private static final long serialVersionUID = 1L;
    
       @Id
       @GeneratedValue(strategy=GenerationType.IDENTITY)
       @Column(name="result_id")
       private int resultId;
    
       @Column(name="result_score")
       private float resultScore;
    
       @Column(name="result_subject")
       private String resultSubject;
       //成績與學生是多對一的關系。意味著一條成績只能對應一個學生。
       @ManyToOne
       @JoinColumn(name = "student_id")
       private Student student;
    //補全get、set方法
    }
    

    –測試代碼

    //需求:通過ID,查詢成績信息,然后通過成績查詢對應的學生信息
    @Test
    public void findById(){
        //第一步:獲得操作對象
        EntityManager entityManager = JpaUtils.getEntityManager();
    
        //第二步:操作-查詢
        //查詢學習信息
        Result result = entityManager.find(Result.class, 1);
        System.out.println("科目:"+result.getResultSubject()+",分數:"+result.getResultScore());
        //通過成績查詢學生
        System.out.println("學生名:"+result.getStudent().getStudentName());
        //第三步:提交關閉
        entityManager.close();
    }
    

    一對一關系

    需求:通過ID查詢學生身份信息,在通過學生身份查詢學生信息
    --學生身份實體類
    @Entity
    @Table(name="tb_student_identifer")
    public class StudentIdentifer implements Serializable {
       private static final long serialVersionUID = 1L;
    
       @Id
       @Column(name="student_id")
       private int studentId;
    
       @Column(name="student_idcard")
       private String studentIdcard;
    
       @Column(name="student_number")
       private String studentNumber;
    
       //配置學生身份與學生的而關系,一對一
       @OneToOne
       @JoinColumn(name = "student_id")
       private  Student student;
       //補全Get、Set代碼
    }
    

    –測試代碼

    @Test
    public void findStudentIdentiferAndStudent(){
        //查詢身份
        EntityManager manager = JpaUtils.getEntityManager();
        StudentIdentifer identifer = manager.find(StudentIdentifer.class, 1);
        System.out.println("身份證:"+identifer.getStudentIdcard()+",學生名:"+identifer.getStudent().getStudentName());
    
    }
    

    多對多關系

    需求:通過ID,查詢學生信息,然后通過學生查詢對應教師信息
    --Student實體類,增加以下代碼
    //多對多的三個條件,中間表示誰,本表外鍵示誰,關聯表外鍵示誰
    //JoinTable注解:用于配置多對多關系的
    //name屬性,用于配置中間表的表名
    //joinColumns屬性,用于配置當前實體類對應中間表的外鍵名
    //inverseJoinColumns屬性:用于配置關聯表對應中間表的外鍵名
    @ManyToMany
    @JoinTable(name = "tb_student_teacher",joinColumns = @JoinColumn(name = "student_id"),inverseJoinColumns = @JoinColumn(name = "teacher_id"))
    private List<Teacher> teachers;
    
    public List<Teacher> getTeachers() {
       return teachers;
    }
    
    

    –測試代碼

    //需求:通過ID,查詢學生信息,然后通過學生查詢對應教師信息
    @Test
    public void findStudentAndTeacher(){
        //第一步:獲得操作對象
        EntityManager entityManager = JpaUtils.getEntityManager();
        //第二步:操作-查詢
        //查詢學習信息
        Student student = entityManager.find(Student.class, 1);
        System.out.println("學生名:"+student.getStudentName());
        List<Teacher> teachers = student.getTeachers();
        for (Teacher teacher : teachers) {
            System.out.println("教師名:"+teacher.getTeacherName());
        }
        //第三步:提交關閉
        entityManager.close();
    }
    
    版權聲明:本文為weixin_43472934原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_43472934/article/details/106998339

    智能推薦

    MongoDB之多表關聯查詢

    最近在看同事代碼的時候,注意到了$lookup多表關聯查詢,不太清楚類比MySQL中是哪種連接查詢,因此就有了此次的測試總結。接下來,我會用測試結果來介紹MySQL中的內連接、左外連接、右外連接,介紹MongoDB中$lookup的用法以及進行測試,最后通過測試結果來得出類比結果。 一、MySQL中的多表連接查詢 MySQL中的連接分為內連接、左外連接、右外連接。 首先,我們先準備好測試數據: 接...

    Hibernate多表關聯查詢記錄映射

    通常情況下,單表的查詢比較簡單,在hibernate中可以將查詢記錄直接映射到具體的實體類,因為通常會通過JPA注解將數據表和實體類建立映射關系,在查詢數據,保存數據時,可以直接操作java實體類,但是涉及到多表查詢,查詢的多條記錄,如果也要和java的類建立關系映射,需要做一些處理。 hibernate查詢支持多種,如使用基本實體類對象查詢,HQL查詢,QBC(Query By Criteria...

    springboot 之mybatis 多表關聯查詢

    數據庫表 一對多查詢 自定義實體類: dao層: 直接三層調用即可 :dao層—> Service 層---->Controller 層: mapper文件 效果圖: 無條件查詢: 多對一查詢 自定義實體類: mapper文件: Dao 層 直接三層調用即可 :dao層—> Service 層---->Controller 層 測試效果圖: 其他同理...

    Unity_Shader高級篇_13.1_Unity Shader入門精要

    13.4 再談邊緣檢測 在12.3中,我們曾使用Sobel算子對屏幕圖像進行邊緣測試,實現描邊的效果。但是,這種直接利用顏色信息進行邊緣檢測的方法會產生很對我們不希望得到的邊緣線,如圖13.8所示。 可以看出,物體的紋理、陰影等位置也被描上黑邊,而這往往不是我們希望看到的。在本節中,我們將學習如何在深度和法線上進行邊緣檢測,這些圖像不會受紋理和光照的影響,而僅僅保存了當前渲染物體的模型信息,通過這...

    Seata AT 模式 原理詳解

    目錄 前提 整體機制 寫隔離 讀隔離 工作機制 一階段 二階段-回滾 二階段-提交 附錄 回滾日志表 前提 基于支持本地 ACID 事務的關系型數據庫。 Java 應用,通過 JDBC 訪問數據庫。 整體機制 兩階段提交協議的演變: 一階段:業務數據和回滾日志記錄在同一個本地事務中提交,釋放本地鎖和連接資源。 二階段: 提交異步化,非常快速地完成。 回滾通過一階段的回滾日志進行反向補償。 寫隔離 ...

    猜你喜歡

    Python爬蟲 | 滑動驗證碼**

    極驗驗證碼:需要手動拼合滑塊來完成的驗證,相對圖形驗證碼識別難度上升了幾個等級。下面用程序識別并通過極驗驗證碼的驗證,其中有分析識別思路、識別缺口位置、生成滑塊拖動、模擬實現滑塊拼合通過驗證等步驟。需要用到Chrome 瀏覽器,并配置 ChromeDriver ,要用到的 Python 庫是 Selenium。 1、 對極驗驗證碼了解   極驗驗證碼官網:http://www.geetest.co...

    MobaXterm root用戶連接虛擬機時出現Access denied

    1.linux打開ssh服務 2.新建連接 首先在romote host中填入要連接的主機ip specify username中填入連接的用戶名 port為連接端口默認為22 輸入連接用戶的密碼 linux默認不顯示密碼 發現密碼正確但是連接不上 問題解決 /etc/ssh/sshd_config 配置問題: #PermitRootLogin prohibit-password將該行改為Perm...

    Linux C 預處理命令

    預處理命令 一、宏定義 C語言標準允許在程序中用一個標識符來表示一個字符串,成為宏。標識符為宏名 ,在編譯預處理時,將程序中所有的宏名用相應的字符串來替換,這個過程稱為宏替換,宏分為兩種:無參數的宏和有參數的宏。 1.無參數的宏 無參數宏定義的一般形式為:#define 標識符字符串 “#”代表本行是編譯預處理命令。define是宏定義的關鍵詞,標識符是宏名。字符串是宏名所...

    有意思的算法(一)----冒泡排序

        冒泡排序的基本思想是:每次比較兩個相鄰的元素,如果它們的順序錯誤就把他們交換過來。     下面舉一個具體的例子來介紹一下冒泡排序。     有12,35,99,18,76五個數進行從大到小的排序,既然是從大到小排序,也就是說越小的越靠后,可不要把這句當成廢話,這可是最關...

    cordova學習筆記_創建一個cordova項目

    環境和工具 webstorm Node.js JDK git 打開git bash,進入你要創建項目的目錄,鍵入以下命令 進入cordovaDemo這個文件夾: 添加Android平臺 cordova platforms add android platforms中已經有了一個Android平臺 下面打開webstorm,然后file - open 找到cordovaDemo打開 現在在webst...

    精品国产乱码久久久久久蜜桃不卡