1. 程式人生 > >Mybatis 一對多關聯註解

Mybatis 一對多關聯註解

最近學習mybatis,記錄下一對多關聯註解。
這裡用班級(Classes)和學生(Student)一對多關聯,配置如下:
Classes.java

public class Classes {
    public int id;
    public String name;
    public List<Student> studentList;
    //getter/setter
    }

Student.java

public class Student {
    private int id;
    private String name;
    private
Classes classes; //getter/setter }

ClassesMapper.java

public interface ClassesMapper {

    @Insert("insert into classes (name) values (#{name})")
    @Options(useGeneratedKeys=true,keyProperty="id")
    public void insertClasses(Classes classes);

    @Select("select * from classes where id=#{id}"
) @Results({ @Result(id=true,property="id",column="id"), @Result(property="name",column="name"), @Result(property="studentList",column="id",javaType=List.class, many=@Many(select="com.lsj.test.mybatis.annotation.mapper.StudentMapper.selectStudentByClass")) }) public
Classes selectClasses(int id); @Delete("delete from classes where id=#{id}") public void deleteClasses(int id); }

StudentMapper.java

public interface StudentMapper {

    @Insert("insert into student (name,classes_id) values(#{name},#{classes.id})")
    @Options(useGeneratedKeys=true,keyProperty="id")
    public void insertStudent(Student student);

    @Select("select * from student where id=#{id}")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="classes",column="classes_id",javaType=Classes.class,
        one=@One(select="com.lsj.test.mybatis.annotation.mapper.ClassesMapper.selectClasses"))
    })
    public Student selectStudent(int id);

    @Select("select * from student where classes_id=#{classId}")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="classes",column="classes_id",javaType=Classes.class,
        one=@One(select="com.lsj.test.mybatis.annotation.mapper.ClassesMapper.selectClasses"))
    })
    public List<Student> selectStudentByClass(int classId);

    @Delete("delete from student where id=#{id}")
    public void deleteStudent(int id);
}

這裡StudentMapper中,Student中包含classes物件,是多端,通過

        @Result(property="classes",column="classes_id",javaType=Classes.class,
        one=@One(select="com.lsj.test.mybatis.annotation.mapper.ClassesMapper.selectClasses")

把student與classes聯絡起來,這樣查詢student時,根據classes_id就可以加上classes查詢並加入到student中

在ClassesMapper中查詢studentList時,引用了StudentMapper中通過班級Id查詢Student的select語句

@Result(property="studentList",column="id",javaType=List.class,
        many=@Many(select="com.lsj.test.mybatis.annotation.mapper.StudentMapper.selectStudentByClass")

其中many語句需要在StudentMapper定義一個根據班級id查學生的select語句,上面的Result的many中column必須是班級表的id,把班級id傳給select語句作為引數。

相關推薦

Mybatis 一對關聯註解

最近學習mybatis,記錄下一對多關聯註解。 這裡用班級(Classes)和學生(Student)一對多關聯,配置如下: Classes.java public class Classes { public int id; publi

(十四)Mybatis一對關聯查詢

注:程式碼已託管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,專案是mybatis-10-one2many,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.sql中),覺得有

mybatis一對關聯查詢子表只返回一條資料

注意:在mybatis的部分版本中發現當兩個表的主鍵列名一致,比如都是id時,配置關聯查詢時子表只能返回1條資料,在這裡提供一種簡單的方法,避免大量修改檔案,由於我的原始碼不便公開,請大家看這裡的原始碼:http://blog.csdn.net/qinshijangshan/

MyBatis關聯查詢,一對關聯查詢

log www. 相同 bubuko pre img ref sele 傳遞 實體關系圖,一個國家對應多個城市 一對多關聯查詢可用三種方式實現: 單步查詢,利用collection標簽為級聯屬性賦值; 分步查詢: 利用association標簽進行分步查詢; 利用co

javaEE Mybatis,一對一、一對關聯查詢,resultMap配置關聯屬性的對映

OrderMapper.xml(實體類的Sql配置檔案,resultMap配置一對一、一對多關聯屬性的對映): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//

Mybatis一對一、一對關聯對映

這裡拿學生和班級比喻: 一個班級有多個學生,這裡是一對多。 學生所在的班級,是多對一,其實可以理解為一對一。 1、一對多 Student類: public class Students { private Integer id; private String name;

mybatis一對及分頁可能存在的問題即關聯查詢分頁問題,巢狀的list中數量對不上

專案中遇到了一個小問題,在此記錄下,方便以後程式碼複用並且能快速排查這個小問題。 需求如下:評論和回覆是一對多的關係,並且根據評論進行分頁查詢,至於回覆數量不做限制,有多少就查多少。 存在問題:由於兩張表是用連線查詢,所以對於同一條評論存在多條回覆的情況,那麼用sql查詢出來的數量應該是由回

使用註解方式實現mybatis一對

class ClassA { private int id; private List<ClassB> list; // public getters and setters } class ClassB { private

Mybatis】collection解決一對關聯查詢

在上上篇中我們用級聯屬性的方式把資料查出來封裝到Employee中,還有另一種方式實現資料的封裝。接下來小編將介紹collection標籤的相關知識,包括巢狀查詢和分段查詢兩種方式。現在有員工和部門兩張

mybatis一對一、一對關聯使用及結果巢狀和條件巢狀理解

例一:使用association進行一對一關聯查詢,這裡使用條件巢狀並且巢狀兩層 public class ServerorderEntity { private String id; private String serverProductId; private

mybatis使用者角色許可權一對關聯查詢

mybatis一對多關聯查詢案例 1.需求 2.資料庫說明 3.實體說明 4.mybatis SQL語句編寫 一.需求 在做角色許可權管理時,需要根據使用者名稱查詢其對應的所有角色以及擁有的所有許可權 二.資料庫說明 資料庫有如下幾個表

MyBatis學習(六):MyBatis一對關聯如何操作

上面一篇文章是關於MyBatis的一對一的關聯如何操作,這一篇文章將主要講述一對多,如何實現。 首先還是在上面的一個class表,然後再構建一個student表,一個班級的學生會有很多,因此這就是所說的一對多。 要實現的操作就是通過class的一個id查詢班級的老師(一對

MyBatis框架的學習(五)——一對一關聯對映和一對關聯對映

在實際開發中我們不可能只是對單表進行操作,必然要操作多表,本文就來講解多表操作中的一對一關聯對映和一對多(或多對一)關聯對映,至於多對多關聯對映實質上也是兩個一對多(或多對一)關聯對映,所以在這裡我並不打算講解。先從一對一關聯對映講起。本文案例程式碼的編寫是建立

myBatis學習筆記(5)——一對關聯表查詢

需求 上一篇筆記是一對一,一個學生對應一個老師,本次我們修改一下需求,一個老師有多個學生 參考:myBatis學習筆記(4)——一對一關聯表查詢 老師類: package com.bank.en

Mybatis學習總結五】實現關聯表查詢----一對關聯(collection)

實現關聯表查詢----一對多關聯(collection) 一對多需求:即一張表class中又含有多張表(teacher,student)內容。現根據class_id 來獲取對應的班級資訊(包括學生和老師資訊)。 1 、建立表和資料: CREATE TABLE studen

MyBatis初級實戰之六:一對關聯查詢

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###

一對關聯

return ria 增加 code auth save posit 關聯 spa 一對多關聯 關聯定義 一對多關聯的情況也比較常見,使用hasMany方法定義,參數包括: hasMany(‘關聯模型名‘,‘外鍵名‘,‘主鍵名‘,[‘模型別名定義‘]); 例如一篇文章可以

Mybatis一對對一中主子表字段名一致產生的問題及解決方案

由於 jdbc 子表字段 etc main csdn base mes 方式 數據庫兩張表的字段名都和兩個類的屬性名稱一樣,這時在關聯查詢出現一個問題。 學生類: package com.pojo; public class Student {

Hibernate一對關聯關系保存時的探究

product 建立 9.png pan 保存 實踐 不能 一對多 cnblogs 在以前使用hibernate時,經常對保存存在關聯關系的對象時,不確定是否能保存成功。 因此,特意對一對多關系的2個對象進行實踐。一、pojo類和配置文件的準備

HIbernate 一對雙向註解

pda gen int urn 生成 created man app nis package cn.hbonetomany;import javax.persistence.*;import java.util.HashSet;import java.util.Set;/*