Mybatis 多對一查詢的實現(xiàn)方法
架構(gòu)
這里從學生的角度來說就是多對一的場景
那么在Java中是怎么樣的呢?
環(huán)境搭建
數(shù)據(jù)庫
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);
實體類
Student
package pojo; import lombok.Data; @Data public class Student { private int id; private String name; private Teacher teacher;//這里因為我們有一個對應的關系,學生要對應到一個老師,所以要使用Teacher類型 }
Teacher
package pojo; import lombok.Data; @Data public class Teacher { private int id; private String name; }
接口
(因為這里是多對一,所以我就沒有用到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>
這里說明一下
- association 是相對于對象的
- collection是相對于集合的
然后這里有兩種方法,我們一種一種看
子查詢方法
<?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>
也就是這種方法,它其實是相當于我們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é)果查詢出來然后對結(jié)果集做一下處理
這里特別說明一下column這個屬性,這個可不是數(shù)據(jù)庫中你需要的字段名,而是你查詢出來的那張表的字段名,這里起了別名之后就不再是原來teacher數(shù)據(jù)庫表中的字段名了
到此這篇關于Mybatis 多對一查詢的文章就介紹到這了,更多相關Mybatis 多對一查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring?boot?2.x靜態(tài)資源會被攔截器攔截的原因分析及解決
這篇文章主要介紹了spring?boot?2.x靜態(tài)資源會被攔截器攔截的原因分析及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01淺談JAVA實現(xiàn)選擇排序,插入排序,冒泡排序,以及兩個有序數(shù)組的合并
這篇文章主要介紹了JAVA實現(xiàn)選擇排序,插入排序,冒泡排序,以及兩個有序數(shù)組的合并,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03SpringBoot攔截器如何獲取http請求參數(shù)
這篇文章主要給大家介紹了SpringBoot攔截器如何獲取http請求參數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09