Mybatis 多對(duì)一查詢的實(shí)現(xiàn)方法
架構(gòu)
這里從學(xué)生的角度來(lái)說(shuō)就是多對(duì)一的場(chǎng)景
那么在Java中是怎么樣的呢?
環(huán)境搭建
數(shù)據(jù)庫(kù)
CREATE TABLE `student`( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(20) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO student VALUES (1,"李老師"); CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(20) DEFAULT NULL , `tid` INT(4) NOT NULL, KEY `fk_tid` (`tid`), CONSTRAINT fk_tid FOREIGN KEY(`tid`) REFERENCES `teacher`(`id`) INSERT INTO student VALUES (1,"小紅",1), (2,"小綠",1), (3,"小燈",1), (4,"小勿",1), (5,"小闖",1);
實(shí)體類(lèi)
Student
package pojo; import lombok.Data; @Data public class Student { private int id; private String name; private Teacher teacher;//這里因?yàn)槲覀冇幸粋€(gè)對(duì)應(yīng)的關(guān)系,學(xué)生要對(duì)應(yīng)到一個(gè)老師,所以要使用Teacher類(lèi)型 }
Teacher
package pojo; import lombok.Data; @Data public class Teacher { private int id; private String name; }
接口
(因?yàn)檫@里是多對(duì)一,所以我就沒(méi)有用到TeacherMapper)
StudentMapper
package dao; import pojo.Student; import java.util.List; public interface StudentMapper { List<Student> getStudents(); List<Student> getStudents2(); }
TeacherMapper
package dao; public interface TeacherMapper { }
Mapper配置文件
TeacherMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.TeacherMapper"> </mapper>
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.StudentMapper"> <!-- 第二種 --> <select id="getStudents2" resultMap="StudentTeacher2"> select s.id sid,s.name sname,t.id tid,t.name tname from student s,teacher t where s.tid=t.id; </select> <resultMap id="StudentTeacher2" type="Student" > <result column="sid" property="id" /> <result column="sname" property="name" /> <association property="teacher" javaType="Teacher"> <result property="id" column="tid" /> <result property="name" column="tname" /> </association> </resultMap> <!-- 第一種 --> <select id="getStudents" resultMap="StudentTeacher"> select * from student; </select> <resultMap id="StudentTeacher" type="Student" > <result column="id" property="id" /> <result column="name" property="name" /> <association property="teacher" column="tid" javaType="Teacher" select="getTeachers" /> </resultMap> <select id="getTeachers" resultType="Teacher"> select * from teacher where id=#{id}; </select> </mapper>
這里說(shuō)明一下
- association 是相對(duì)于對(duì)象的
- collection是相對(duì)于集合的
然后這里有兩種方法,我們一種一種看
子查詢方法
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.StudentMapper"> <!-- 第一種 --> <select id="getStudents" resultMap="StudentTeacher"> select * from student; </select> <resultMap id="StudentTeacher" type="Student" > <result column="id" property="id" /> <result column="name" property="name" /> <association property="teacher" column="tid" javaType="Teacher" select="getTeachers" /> </resultMap> <select id="getTeachers" resultType="Teacher"> select * from teacher where id=#{id}; </mapper>
也就是這種方法,它其實(shí)是相當(dāng)于我們Sql里面的子查詢,也就是一層查詢里面嵌套一層查詢
按結(jié)果集查詢
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.StudentMapper"> <!-- 第二種 --> <select id="getStudents2" resultMap="StudentTeacher2"> select s.id sid,s.name sname,t.id tid,t.name tname from student s,teacher t where s.tid=t.id; </select> <resultMap id="StudentTeacher2" type="Student" > <result column="sid" property="id" /> <result column="sname" property="name" /> <association property="teacher" javaType="Teacher"> <result property="id" column="tid" /> <result property="name" column="tname" /> </association> </resultMap> </mapper>
這種方法就是我們一次性把結(jié)果查詢出來(lái)然后對(duì)結(jié)果集做一下處理
這里特別說(shuō)明一下column這個(gè)屬性,這個(gè)可不是數(shù)據(jù)庫(kù)中你需要的字段名,而是你查詢出來(lái)的那張表的字段名,這里起了別名之后就不再是原來(lái)teacher數(shù)據(jù)庫(kù)表中的字段名了
到此這篇關(guān)于Mybatis 多對(duì)一查詢的文章就介紹到這了,更多相關(guān)Mybatis 多對(duì)一查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在MyBatis中實(shí)現(xiàn)一對(duì)多查詢和多對(duì)一查詢的方式詳解(各兩種方式)
- 詳解mybatis多對(duì)一關(guān)聯(lián)查詢的方式
- MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)
- Mybatis一對(duì)多與多對(duì)一查詢處理詳解
- 關(guān)于MyBatis 查詢數(shù)據(jù)時(shí)屬性中多對(duì)一的問(wèn)題(多條數(shù)據(jù)對(duì)應(yīng)一條數(shù)據(jù))
- Mybatis關(guān)聯(lián)查詢之一對(duì)多和多對(duì)一XML配置詳解
- Mybatis 一對(duì)多和多對(duì)一關(guān)聯(lián)查詢問(wèn)題
相關(guān)文章
spring?boot?2.x靜態(tài)資源會(huì)被攔截器攔截的原因分析及解決
這篇文章主要介紹了spring?boot?2.x靜態(tài)資源會(huì)被攔截器攔截的原因分析及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01java實(shí)現(xiàn)計(jì)算周期性提醒的示例
本文分享一個(gè)java實(shí)現(xiàn)計(jì)算周期性提醒的示例,可以計(jì)算父親節(jié)、母親節(jié)這樣的節(jié)日,也可以定義如每月最好一個(gè)周五,以方便安排會(huì)議2014-04-04SpringCloud Nacos集群搭建過(guò)程詳解
Nacos集群不僅僅是服務(wù)注冊(cè)中心,還在微服務(wù)架構(gòu)中發(fā)揮著關(guān)鍵的角色,支持多種場(chǎng)景下的服務(wù)治理和協(xié)調(diào),本文介紹了如何在SpringCloud環(huán)境中搭建Nacos集群,為讀者提供了一份清晰而詳盡的指南,通過(guò)逐步演示每個(gè)關(guān)鍵步驟,讀者能夠輕松理解并操作整個(gè)搭建過(guò)程2024-02-02淺談JAVA實(shí)現(xiàn)選擇排序,插入排序,冒泡排序,以及兩個(gè)有序數(shù)組的合并
這篇文章主要介紹了JAVA實(shí)現(xiàn)選擇排序,插入排序,冒泡排序,以及兩個(gè)有序數(shù)組的合并,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)
這篇文章主要給大家介紹了SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java實(shí)現(xiàn)的漢語(yǔ)拼音工具類(lèi)完整實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的漢語(yǔ)拼音工具類(lèi),結(jié)合完整實(shí)例形式分析了java基于pinyin4j包實(shí)現(xiàn)編碼轉(zhuǎn)換的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11Java實(shí)現(xiàn)局域網(wǎng)聊天小程序
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)局域網(wǎng)聊天小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05