91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis一對多和多對一處理的區別是什么

發布時間:2021-09-13 11:06:06 來源:億速云 閱讀:211 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關Mybatis一對多和多對一處理的區別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

建表

SQL:

create table teacher(
    id int not null,
    name varchar(30) default null,
    primary key (id)
);

insert into teacher (id, name) values (1, '蔡老師');

create table student(
    id int not null ,
    name varchar(30) default null,
    tid int default null,
    constraint fk_tid foreign key (tid) references teacher(id)
);

insert into student(id, name, tid) VALUES (1, '小名', 1);
insert into student(id, name, tid) VALUES (2, '小紅', 1);
insert into student(id, name, tid) VALUES (3, '小亮', 1);
insert into student(id, name, tid) VALUES (4, '小蘭', 1);
insert into student(id, name, tid) VALUES (5, '笑笑', 1);

多對一處理

  • 多個學生對應一個老師

  • 對于學生這邊而言,關聯。即多個學生關聯一個老師【多對一】

  • 對于老師這邊而言,集合。即一個老師有很多的學生【一對多】

mapper

//查詢所有的學生信息以及對應的老師的信息
List<Student> queryStudentAndTeacher();

實體類

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private int id;
    private String name;

    //學生需要關聯一個老師
    private Teacher teacher;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private int id;
    private String name;
}

按照查詢嵌套處理

<!--思路:
	1.查詢所有的學生
	2.根據查詢出來的學生的tid尋找對應的老師  尋找對應的老師,子查詢
-->
<resultMap id="rStuAndTea" type="student">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <!-- 復雜的屬性我們需要單獨處理  
							指定屬性的類型
		 對象使用association  javaType
		 集合使用collection   ofType
	-->
    <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="queryStudentAndTeacher" resultMap="rStuAndTea">
    select * from student
</select>
<select id="getTeacher" resultType="teacher">
    select * from teacher where id = #{id}
</select>

按照結果嵌套處理

<!--方式二  按照結果嵌套處理-->
<resultMap id="rStuAndTea2" type="student">
    <result property="id" column="sid"/>
    <result property="name" column="sname"/>
    <association property="teacher" javaType="Teacher">
        <result property="name" column="tname"/>
    </association>
</resultMap>
<select id="queryStudentAndTeacher2" resultMap="rStuAndTea2">
    select s.id sid, s.name sname, t.name tname
    from student s, teacher t
    where s.tid = t.id
</select>

回顧Mysql多對一查詢方式

  • 子查詢

  • 聯表查詢

一對多處理

  • 一個老師有多個學生

  • 對于老師這邊而言,集合。即一個老師有很多的學生【一對多】

mapper

//查詢指定老師的信息及其所有的學生
Teacher queryTeaAndStu(@Param("tid") int id);

實體類

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private int id;
    private String name;

    //一個老師擁有多個學生
    private List<Student> students;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private int id;
    private String name;
    private int tid;
}

按照查詢嵌套處理

<!--按照結果嵌套查詢-->
<resultMap id="rTeaAndStu" type="teacher">
    <result property="id" column="tid"/>
    <result property="name" column="tname"/>
    <collection property="students" ofType="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="tid" column="tid"/>
    </collection>
</resultMap>
<select id="queryTeaAndStu" resultMap="rTeaAndStu">
    select s.id sid, s.name sname, t.name tname, t.id tid
    from student s, teacher t
    where s.tid = t.id and t.id = #{tid}
</select>

按照查詢嵌套處理

<!--按照查詢嵌套處理-->
<select id="queryTeaAndStu2" resultMap="rTeaAndStu2">
    select * from teacher where id = #{tid}
</select>
<resultMap id="rTeaAndStu2" type="teacher">
    <collection property="students" javaType="ArrayList" ofType="Student"
                select="queryStudentByTeacherId" column="id"/>
</resultMap>
<select id="queryStudentByTeacherId" resultType="Student">
    select * from student where tid = #{tid}
</select>

結果映射

Mybatis一對多和多對一處理的區別是什么

小結

  1. 關聯 - association 【多對一】

  2. 集合 - collection 【一對多】

  3. javaType & ofType

    1. javaType 用來指定實體類中屬性的類型

    2. ofType 用來指定映射到List或者集合中的entity類型,泛型中的約束類型

注意點:

  • 保證SQL的可讀性,盡量保證通俗易懂

  • 注意一對多和多對一中屬性名和字段的問題

  • 如果問題不好排查錯誤,可以使用LOG4J日志

看完上述內容,你們對Mybatis一對多和多對一處理的區別是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浙江省| 谷城县| 互助| 益阳市| 伊吾县| 盐津县| 太白县| 乡城县| 阳信县| 定兴县| 恩平市| 凤阳县| 林周县| 周宁县| 墨脱县| 鄂托克旗| 梧州市| 平谷区| 卢湾区| 左贡县| 大丰市| 广安市| 尉犁县| 手游| 高尔夫| 哈巴河县| 广灵县| 满洲里市| 阿坝| 崇州市| 萍乡市| 灵石县| 五家渠市| 宁陵县| 河北区| 临洮县| 英德市| 巴彦淖尔市| 丁青县| 肇源县| 桂林市|