關(guān)于MyBatis 查詢數(shù)據(jù)時屬性中多對一的問題(多條數(shù)據(jù)對應(yīng)一條數(shù)據(jù))
數(shù)據(jù)準(zhǔn)備
數(shù)據(jù)表
CREATE TABLE `teacher`( id INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `teacher`(id,`name`) VALUES(1,'大師'); CREATE TABLE `student`( id INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, `tid` INT(10) DEFAULT NULL, PRIMARY KEY(id), KEY `fktid` (`tid`), CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; 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);
Teacher 類
public class Teacher {
private int id;
private String name;
}
Student 類
public class Student {
private int id;
private String name;
private Teacher teacher;
}
查詢接口
public interface StudentMapper {
// 查詢嵌套處理 - 子查詢
List<Student> getStudentList();
// 結(jié)果嵌套處理
List<Student> getStudentResult();
}
查詢嵌套處理(子查詢)
思路:先查詢出所有學(xué)生的數(shù)據(jù),再根據(jù)學(xué)生中關(guān)聯(lián)老師的字段 tid 用一個子查詢?nèi)ゲ樵兝蠋煹臄?shù)據(jù)
association:處理對象
property:實(shí)體類中屬性字段
column:查詢結(jié)果中需要傳遞給子查詢的字段
javaType:指定實(shí)體類
select:子查詢SQL
<mapper namespace="com.pro.dao.StudentMapper">
<!--
按照查詢嵌套處理
1. 先查詢所有學(xué)生信息
2. 根據(jù)查詢出來學(xué)生的tid, 接一個子查詢?nèi)ゲ槔蠋?
-->
<resultMap id="StudentTeacher" type="com.pro.pojo.Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--復(fù)雜屬性需要單獨(dú)處理, 對象: association, 集合: collection -->
<association property="teacher" column="tid" javaType="com.pro.pojo.Teacher" select="getTeacher"/>
</resultMap>
<select id="getStudentList" resultMap="StudentTeacher">
select * from student
</select>
<select id="getTeacher" resultType="com.pro.pojo.Teacher">
select * from teacher where id = #{id}
</select>
</mapper>
結(jié)果嵌套處理
思路:先把所有的信息一次性查詢處理, 然后配置字段對應(yīng)的實(shí)體類, 使用 association 配置
association:處理對象
property:實(shí)體類中屬性字段
javaType:指定實(shí)體類
<mapper namespace="com.pro.dao.StudentMapper">
<!--
按照結(jié)果嵌套處理
1. 一次查詢出所有學(xué)生和老師的數(shù)據(jù)
2. 根據(jù)查詢的結(jié)果配置 association 對應(yīng)的屬性和字段
-->
<resultMap id="StudentResult" type="com.pro.pojo.Student">
<result column="sid" property="id"/>
<result column="sname" property="name"/>
<!-- 根據(jù)查詢出來的結(jié)果, 去配置字段對應(yīng)的實(shí)體類 -->
<association property="teacher" javaType="com.pro.pojo.Teacher">
<result column="tname" property="name"/>
</association>
</resultMap>
<select id="getStudentResult" resultMap="StudentResult">
SELECT s.id sid, s.name sname, t.name tname FROM student s, teacher t WHERE s.tid = t.id
</select>
</mapper>
到此這篇關(guān)于MyBatis 查詢數(shù)據(jù)時屬性中多對一的問題(多條數(shù)據(jù)對應(yīng)一條數(shù)據(jù))的文章就介紹到這了,更多相關(guān)MyBatis 查詢數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用JDBC實(shí)現(xiàn)數(shù)據(jù)訪問對象層(DAO)代碼示例
這篇文章主要介紹了使用JDBC實(shí)現(xiàn)數(shù)據(jù)訪問對象層(DAO)代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-10-10
SpringBoot整合Sharding-JDBC實(shí)現(xiàn)MySQL8讀寫分離
本文是一個基于SpringBoot整合Sharding-JDBC實(shí)現(xiàn)讀寫分離的極簡教程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的可以了解一下2021-07-07
Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)詳解下篇
首先我們已經(jīng)知道,在現(xiàn)在流行的“前后端完全分離”架構(gòu)中,前后端聯(lián)調(diào)是一個不可能避免的問題,這篇文章主要介紹了Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)過程2022-08-08
Java 實(shí)戰(zhàn)項目錘煉之網(wǎng)上花店商城的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個網(wǎng)上花店商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
Java中ByteBuddy動態(tài)字節(jié)碼操作庫的使用技術(shù)指南
ByteBuddy?是一個功能強(qiáng)大的?Java?字節(jié)碼操作庫,可以幫助開發(fā)者在運(yùn)行時動態(tài)生成和修改類,而無需直接接觸復(fù)雜的?ASM?API,本文給大家介紹了Java?ByteBuddy動態(tài)字節(jié)碼操作庫的使用技術(shù)指南,需要的朋友可以參考下2025-04-04

