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

Mybatis一對(duì)多和多對(duì)一處理的深入講解

 更新時(shí)間:2021年09月13日 09:02:51   作者:iiis1327  
Mybatis可以通過關(guān)聯(lián)查詢實(shí)現(xiàn),關(guān)聯(lián)查詢是幾個(gè)表聯(lián)合查詢,只查詢一次,通過在resultMap里面的association,collection節(jié)點(diǎn)配置一對(duì)一,一對(duì)多的類就可以完成,這篇文章主要給大家介紹了關(guān)于Mybatis一對(duì)多和多對(duì)一處理的相關(guān)資料,需要的朋友可以參考下

建表

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

多對(duì)一處理

  • 多個(gè)學(xué)生對(duì)應(yīng)一個(gè)老師
  • 對(duì)于學(xué)生這邊而言,關(guān)聯(lián)。即多個(gè)學(xué)生關(guān)聯(lián)一個(gè)老師【多對(duì)一】
  • 對(duì)于老師這邊而言,集合。即一個(gè)老師有很多的學(xué)生【一對(duì)多】

mapper

//查詢所有的學(xué)生信息以及對(duì)應(yīng)的老師的信息
List<Student> queryStudentAndTeacher();

實(shí)體類

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

    //學(xué)生需要關(guān)聯(lián)一個(gè)老師
    private Teacher teacher;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private int id;
    private String name;
}

按照查詢嵌套處理

<!--思路:
	1.查詢所有的學(xué)生
	2.根據(jù)查詢出來的學(xué)生的tid尋找對(duì)應(yīng)的老師  尋找對(duì)應(yīng)的老師,子查詢
-->
<resultMap id="rStuAndTea" type="student">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <!-- 復(fù)雜的屬性我們需要單獨(dú)處理  
							指定屬性的類型
		 對(duì)象使用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>

按照結(jié)果嵌套處理

<!--方式二  按照結(jié)果嵌套處理-->
<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多對(duì)一查詢方式

  • 子查詢
  • 聯(lián)表查詢

一對(duì)多處理

  • 一個(gè)老師有多個(gè)學(xué)生
  • 對(duì)于老師這邊而言,集合。即一個(gè)老師有很多的學(xué)生【一對(duì)多】

mapper

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

實(shí)體類

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

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

按照查詢嵌套處理

<!--按照結(jié)果嵌套查詢-->
<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>

結(jié)果映射

面試高頻點(diǎn)

  • MySQL引擎
  • InnoDB底層原理
  • 索引
  • 索引優(yōu)化

小結(jié)

  1. 關(guān)聯(lián) - association 【多對(duì)一】
  2. 集合 - collection 【一對(duì)多】
  3. javaType & ofType
    1. javaType 用來指定實(shí)體類中屬性的類型
    2. ofType 用來指定映射到List或者集合中的entity類型,泛型中的約束類型

注意點(diǎn):

  • 保證SQL的可讀性,盡量保證通俗易懂
  • 注意一對(duì)多和多對(duì)一中屬性名和字段的問題
  • 如果問題不好排查錯(cuò)誤,可以使用LOG4J日志

總結(jié)

到此這篇關(guān)于Mybatis一對(duì)多和多對(duì)一處理的文章就介紹到這了,更多相關(guān)Mybatis一對(duì)多和多對(duì)一處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章教你如何用多種迭代寫法實(shí)現(xiàn)二叉樹遍歷

    一篇文章教你如何用多種迭代寫法實(shí)現(xiàn)二叉樹遍歷

    這篇文章主要介紹了C語言實(shí)現(xiàn)二叉樹遍歷的迭代算法,包括二叉樹的中序遍歷、先序遍歷及后序遍歷等,是非常經(jīng)典的算法,需要的朋友可以參考下
    2021-08-08
  • SpringMVC配置404踩坑記錄

    SpringMVC配置404踩坑記錄

    本文主要介紹了SpringMVC配置404踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Maven基礎(chǔ)知識(shí)大梳理

    Maven基礎(chǔ)知識(shí)大梳理

    這篇文章主要是Maven基礎(chǔ)知識(shí)大梳理,Maven主要是用來解決導(dǎo)入java類依賴的jar,編譯java項(xiàng)目主要問題,大家可以讀一讀這篇文章,更深一步的了解Maven
    2021-08-08
  • JAVA提高第九篇 集合體系

    JAVA提高第九篇 集合體系

    這篇文章主要為大家詳細(xì)介紹了JAVA提高第九篇集合體系的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • log4j2的高并發(fā)死鎖問題配置優(yōu)化方式

    log4j2的高并發(fā)死鎖問題配置優(yōu)化方式

    這篇文章主要介紹了log4j2的高并發(fā)死鎖問題配置優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼

    SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼

    加密解密本身并不是難事,問題是在何時(shí)去處理?SpringMVC?中給我們提供了?ResponseBodyAdvice?和?RequestBodyAdvice,利用這兩個(gè)工具可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行預(yù)處理,非常方便。廢話不多說,我們一起來學(xué)習(xí)一下
    2022-09-09
  • Java信號(hào)量全解析

    Java信號(hào)量全解析

    這篇文章主要介紹了Java信號(hào)量的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Feign如何解決服務(wù)之間調(diào)用傳遞token

    Feign如何解決服務(wù)之間調(diào)用傳遞token

    這篇文章主要介紹了Feign如何解決服務(wù)之間調(diào)用傳遞token,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • idea一招搞定同步所有配置(導(dǎo)入或?qū)С鏊信渲?

    idea一招搞定同步所有配置(導(dǎo)入或?qū)С鏊信渲?

    使用intellij idea很長(zhǎng)一段時(shí)間,軟件相關(guān)的配置也都按照自己習(xí)慣的設(shè)置好,如果需要重裝軟件,還得需要重新設(shè)置,本文就詳細(xì)的介紹了idea 同步所有配置,感興趣的可以了解一下
    2021-07-07
  • Java 單向隊(duì)列及環(huán)形隊(duì)列的實(shí)現(xiàn)原理

    Java 單向隊(duì)列及環(huán)形隊(duì)列的實(shí)現(xiàn)原理

    本文主要介紹了Java 單向隊(duì)列及環(huán)形隊(duì)列的實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論

阳高县| 延庆县| 建昌县| 荣成市| 岳池县| 光山县| 江陵县| 梁山县| 罗甸县| 开封县| 正镶白旗| 皮山县| 衡南县| 罗田县| 奈曼旗| 大安市| 曲沃县| 临海市| 堆龙德庆县| 鄱阳县| 和静县| 葵青区| 阜新市| 奉贤区| 吴川市| 枞阳县| 兰溪市| 灯塔市| 新闻| 承德县| 交口县| 华阴市| 嘉黎县| 富宁县| 乌苏市| 曲麻莱县| 呼伦贝尔市| 女性| 南开区| 新密市| 晋城|