Mybatis一對多與多對一查詢處理詳解
要點(diǎn)
- 主要還是結(jié)果集映射(resultMap)
- association標(biāo)簽: 一個復(fù)雜類型的關(guān)聯(lián);許多結(jié)果將包裝成這種類型(JavaBean)嵌套結(jié)果映射,關(guān)聯(lián)可以是 resultMap 元素,或是對其它結(jié)果映射的引用
- collection標(biāo)簽: 一個復(fù)雜類型的集合(List)嵌套結(jié)果映射,集合可以是resultMap元素,或是對其它結(jié)果映射的引用
一對多(association)
數(shù)據(jù)庫結(jié)構(gòu)

tid是student的外鍵,是teacher表的id
JavaBean
public class Student {
private int id;
private String name;
private Teacher teacher;
}
public class Teacher {
private int id;
private String name;
}
mapper.java
public interface StudentMapper {
List<Student> getStudent();
List<Student> getStudent2();
}
Student類里面有teacher,要想查出Student中的Teacher就需要映射。
方法有二
(1)
<select id="getStudent" resultMap="StudentTeacher">
select * from mybatis.student
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<!--子查詢-->
<select id="getTeacher" resultType="Teacher">
select * from mybatis.teacher where id=#{Anything}
</select>

(2)
<select id="getStudent2" resultMap="StudentTeacher2">
select * from mybatis.student as s ,mybatis.teacher as t where s.tid=t.id
</select>
<resultMap id="StudentTeacher2" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<association property="teacher" javaType="Teacher">
<result property="id" column="tid"/>
<result property="name" column="name"/>
</association>
</resultMap>

多對一
JavaBean
public class Teacher2 {
private int id;
private String name;
//一個老師對應(yīng)多個學(xué)生
private List<Student2> students;
}
public class Student2 {
private int id;
private String name;
private int tid;
}
mapper.java
public interface TeacherMapper2 {
List<Teacher2> getTeacher(@Param("id") int id);
}
mapper.xml
<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.DAO.TeacherMapper2">
<select id="getTeacher" parameterType="int" resultMap="teacherS">
select s.id, s.name, s.tid,t.id as tid, t.name as tname from mybatis.student as s ,mybatis.teacher as t where s.tid=t.id and t.id=#{id}
</select>
<resultMap id="teacherS" type="teacher2">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="students" ofType="student2">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
</mapper>

小結(jié)
- 一對多和多對一區(qū)別不大
- 其實(shí)就是association(類)和collection(集合)的區(qū)別
- 還有ofType和javaType的區(qū)別
- 如果查詢結(jié)果不符合預(yù)期,請?jiān)O(shè)置別名試一試
到此這篇關(guān)于Mybatis一對多與多對一查詢處理的文章就介紹到這了,更多相關(guān)Mybatis一對多與多對一查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
因不會遠(yuǎn)程debug調(diào)試我被項(xiàng)目經(jīng)理嘲笑了
這篇文章主要介紹了遠(yuǎn)程debug調(diào)試的相關(guān)內(nèi)容,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼
本篇文章主要介紹了SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼,具有一定的參考價值,有興趣的可以了解一下。2017-02-02
詳解Java如何實(shí)現(xiàn)加密或者解密PDF文檔
PDF文檔加密是一種用于保護(hù)文件內(nèi)容的功能。這篇文章主要介紹了Java實(shí)現(xiàn)加密或者解密PDF文檔的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
java?LeetCode刷題稍有難度的貪心構(gòu)造算法
這篇文章主要為大家介紹了java?LeetCode刷題稍有難度的貪心構(gòu)造題解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
SpringBoot實(shí)現(xiàn)自定義Redis的連接的流程步驟
Spring Boot 自定義 Redis 主要是指在基于 Spring Boot 的應(yīng)用程序中,當(dāng)你需要更深入地控制或擴(kuò)展對 Redis 數(shù)據(jù)庫的操作,而不是僅僅依賴 Spring Data Redis 的默認(rèn)配置,本文給大家介紹了SpringBoot實(shí)現(xiàn)自定義Redis的連接的流程步驟,需要的朋友可以參考下2024-09-09
java使用jdbc連接數(shù)據(jù)庫簡單實(shí)例
這篇文章主要為大家詳細(xì)介紹了java使用jdbc連接數(shù)據(jù)庫的簡單實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07

