成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

MyBatis如何實現多表查詢(多對一、一對多)

瀏覽:7日期:2023-10-19 12:27:29

MyBatis實現多表查詢

一、多對一查詢

數據庫的準備

MyBatis如何實現多表查詢(多對一、一對多)

創建兩張表,一張老師表,一張學生表

將老師主鍵id關聯學生外鍵tid

創建sql的語句

create table teacher( id int primary key,teacher_name varchar(30) not null)insert into teacher(id,teacher_name) values (1,’毛老師’)create table student( id int primary key,student_name varchar(30) not null,tid int default null)//建立主外鍵關聯alter table student add constraint teacher_student_id foreign key (tid) references teacher(id)insert into student values (1,’小明’,1)insert into student values (2,’小毛’,1)insert into student values (3,’小紅’,1)insert into student values (4,’大黃’,1)insert into student values (5,’超兒’,1)

項目結構

MyBatis如何實現多表查詢(多對一、一對多)

使用Lombok插件,創建實體類。

(提高整潔度,主要想toulan)

@Datapublic class Student { private int id; private String name; //學生需要關聯一個老師 private Teacher teacher;}

@Datapublic class Teacher { private int id; private String name;}

1、嵌套查詢處理

編寫接口

public interface StudentMapper { //查詢所有學生的信息以及對應老師的信息 public List<Student> getStudent();}

2. 編寫StudentMapper.xml的查詢語句(重點)

<mapper namespace='dao.StudentMapper'><!-- 思路:1. 查詢所有學生的信息根據查詢出來的學生tid,尋找對應的老師--> <select resultMap='StudentTeacher'> select * from student </select> <resultMap type='pojo.Student'><!--復雜的屬性需要單獨處理 是對象就使用association,是集合就使用collection--><!-- select 子查詢 --><result property='name' column='student_name'/><association property='teacher' column='tid' javaType='pojo.Teacher' select='getTeacher'/> </resultMap> <select resultType='pojo.Teacher'>select * from teacher where id=#{id} </select>

測試類

@Test public void getStudent(){SqlSession sqlSession = Mybatisutil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);List<Student> studentList = mapper.getStudent();for (Student student : studentList) { System.out.println(student);}sqlSession.close(); }

測試結果

MyBatis如何實現多表查詢(多對一、一對多)

2、聯合查詢處理

編寫接口

//按照結果嵌套查詢public List<Student> getStudent2();

2. 編寫StudentMapper.xml的查詢語句(重點)

<!-- 按照結果嵌套處理--> <select resultMap='StudentTeacher2'> select s.id sid,s.student_name sname,t.teacher_name tname from student s,teacher t where s.tid=t.id </select> <resultMap type='pojo.Student'><result property='id' column='sid'/><result property='name' column='sname'/><association property='teacher' javaType='pojo.Teacher'> <result property='name' column='tname'/></association> </resultMap>

編寫測試類

@Test public void getStudent(){SqlSession sqlSession = Mybatisutil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);List<Student> studentList = mapper.getStudent2();for (Student student : studentList) { System.out.println(student);}sqlSession.close(); }

測試結果

MyBatis如何實現多表查詢(多對一、一對多)

二、一對多查詢

更改實體類

@Datapublic class Student { private int id; private String name; private int tid;}

@Datapublic class Teacher { private int id; private String name; //一個老師擁有多個學生 private List<Student> students;}

1、嵌套查詢處理 編寫接口

Teacher getTeacher2(@Param('tid') int id);

由于字段不一致,要做映射

主要TeacherMapper.xml的查詢語句(重點)

<select resultMap='TeacherStudent2'> select * from teacher where id=#{tid} </select> <resultMap type='pojo.Teacher'><result property='name' column='teacher_name'/><collection property='students' javaType='ArrayList' ofType='pojo.Student' select='getStudentByTeacherId' column='id'/> </resultMap> <select resultType='pojo.Student'>select * from student where tid=#{tid} </select>

測試類

@Test public void getTeacher(){SqlSession sqlSession = Mybatisutil.getSqlSession();TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);Teacher teacher = mapper.getTeacher2(1);System.out.println(teacher);sqlSession.close(); }

測試結果:

MyBatis如何實現多表查詢(多對一、一對多)

Teacher(id=0, name=毛老師, students=[Student(id=1, name=null, tid=1), Student(id=2, name=null, tid=1), Student(id=3, name=null, tid=1), Student(id=4, name=null, tid=1), Student(id=5, name=null, tid=1)])

2、聯合查詢處理

編寫接口

//獲取指定老師下的所有學生及老師的信息 Teacher getTeacher(@Param('tid') int id);

由于字段不一致,要做映射

主要TeacherMapper.xml的查詢語句(重點)

<!-- 按結果嵌套查詢--> <select resultMap='TeacherStudent'>select s.id sid,s.student_name sname,t.teacher_name tname,t.id tidfrom student s,teacher twhere s.tid=t.id and t.id=#{tid} </select> <resultMap type='pojo.Teacher'><result property='id' column='tid'/><result property='name' column='tname'/><!--復雜的屬性需要單獨處理 是對象就使用association,是集合就使用collectionjavaType='' 指定的屬性類型集合中的泛型信息,使用ofType獲取--><collection property='students' ofType='pojo.Student'> <result property='id' column='sid'/> <result property='name' column='sname'/> <result property='tid' column='tid'/></collection> </resultMap>

測試類

@Test public void getTeacher(){SqlSession sqlSession = Mybatisutil.getSqlSession();TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);Teacher teacher = mapper.getTeacher(1);System.out.println(teacher);sqlSession.close(); }

測試結果:

MyBatis如何實現多表查詢(多對一、一對多)

Teacher(id=1, name=毛老師, students=[Student(id=1, name=小明, tid=1), Student(id=2, name=小毛, tid=1), Student(id=3, name=小紅, tid=1), Student(id=4, name=大黃, tid=1), Student(id=5, name=超兒, tid=1)])總結:

本章就使用了簡單的兩張表聯合查詢,介紹簡單的使用,更復雜的多表聯合主要在編寫sql的時候難度大點,或者是嵌套查詢要更嚴謹點

官方文檔也給了詳細的非常復雜的多表查詢如下: mybatis,這么復雜的看的我頭疼

<!-- 非常復雜的語句 --><select resultMap='detailedBlogResultMap'> select B.id as blog_id, B.title as blog_title, B.author_id as blog_author_id, A.id as author_id, A.username as author_username, A.password as author_password, A.email as author_email, A.bio as author_bio, A.favourite_section as author_favourite_section, P.id as post_id, P.blog_id as post_blog_id, P.author_id as post_author_id, P.created_on as post_created_on, P.section as post_section, P.subject as post_subject, P.draft as draft, P.body as post_body, C.id as comment_id, C.post_id as comment_post_id, C.name as comment_name, C.comment as comment_text, T.id as tag_id, T.name as tag_name from Blog B left outer join Author A on B.author_id = A.id left outer join Post P on B.id = P.blog_id left outer join Comment C on P.id = C.post_id left outer join Post_Tag PT on PT.post_id = P.id left outer join Tag T on PT.tag_id = T.id where B.id = #{id}</select>

在我們編寫的時候注意點:

不要忘記注冊Mapper.xml 在初學的時候盡量不要給實體類取別名,為了不要混淆,加深理解 實體類字段要和數據庫字段一致,如果不一致,那就要用result標簽做映射 復雜的屬性需要單獨處理,是對象就使用association,是集合就使用collection來映射 javaType='' 指定的屬性類型| 集合中的泛型信息,使用ofType獲取 多注意復雜屬性的嵌套使用

JavaType & ofType

JavaType 用來指定實體類中屬性的類型 ofType 用來指定映射到List或者集合中的實體類pojo類型,泛型中的約束類型

到此這篇關于MyBatis如何實現多表查詢(多對一、一對多)的文章就介紹到這了,更多相關MyBatis多表查詢內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
26uuu精品一区二区在线观看| 欧美日韩精品免费观看视一区二区| 成人久久18免费网站麻豆| 久久久蜜桃一区二区人| 亚洲乱码国产乱码精品精的特点| av日韩在线网站| 日韩一区二区三区在线观看| 国产成人在线色| 亚洲午夜羞羞片| 欧美国内亚洲| 久久综合给合久久狠狠狠97色69| 国产精品亚洲人在线观看| 欧美日韩色一区| 九九精品一区二区| 欧美日韩国产美| 国内精品在线播放| 欧美精品v国产精品v日韩精品| 国产一区二区三区四区在线观看| 9191久久久久久久久久久| 国产宾馆实践打屁股91| 91精品国产综合久久精品app| 国产精品一级片在线观看| 日韩一级黄色片| 成人综合婷婷国产精品久久 | 国产成人精品免费视频网站| 欧美日韩dvd在线观看| 国产乱国产乱300精品| 欧美一卡在线观看| 成人av电影观看| 26uuu亚洲综合色| 欧美精品自拍| 亚洲美女精品一区| 99国产精品| 亚洲午夜一区二区三区| 久久蜜桃资源一区二区老牛| 麻豆精品一区二区| 欧美一级艳片视频免费观看| 成av人片一区二区| 国产精品天天摸av网| 日韩视频二区| 日本欧美在线看| 日韩一区二区在线看片| 欧美1区2区3区| 亚洲免费三区一区二区| 久久国产主播精品| 激情文学综合丁香| 久久综合久色欧美综合狠狠| 午夜久久tv| 亚洲一区二区三区影院| 欧洲精品在线观看| 成人国产视频在线观看| 亚洲欧美一区二区视频| 香蕉国产精品偷在线观看不卡| 日本不卡不码高清免费观看| 欧美喷水一区二区| 91一区一区三区| 亚洲精品自拍动漫在线| 色女孩综合影院| 国产精品18久久久久| 久久久久久久久久久久久女国产乱| 伊人久久亚洲热| 日韩极品在线观看| 欧美肥妇bbw| 欧美二区在线| 亚洲一区二区三区四区在线| 欧美日韩国产大片| 午夜精品网站| 丝袜亚洲另类欧美综合| 日韩一级片在线播放| 狠狠入ady亚洲精品| 婷婷丁香激情综合| 欧美一级高清片| 很黄很黄激情成人| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日本免费在线视频不卡一不卡二| 在线91免费看| 国产精品啊啊啊| 免费在线观看日韩欧美| 2020日本不卡一区二区视频| 激情六月综合| 美女看a上一区| 久久久久久久久岛国免费| 亚洲一区二区成人| 国产成人免费av在线| 亚洲欧美激情在线| 欧美另类一区二区三区| 激情欧美一区| 美女视频黄频大全不卡视频在线播放| 精品国产免费久久 | 精品国产免费视频| 国产一级久久| 9i在线看片成人免费| 亚洲动漫第一页| 欧美成人一级视频| 一区二区三区偷拍| 国产91在线|亚洲| 亚洲午夜国产一区99re久久| 精品不卡在线视频| 久久精品二区| 欧美一区二区三区另类 | 91国偷自产一区二区开放时间| 91欧美激情一区二区三区成人| 婷婷成人综合网| 国产欧美一二三区| 欧美亚洲自拍偷拍| 在线观看视频日韩| 国产91精品精华液一区二区三区| 亚洲小说欧美激情另类| 国产亚洲一本大道中文在线| 日本精品裸体写真集在线观看| 亚洲欧美综合一区| 国产自产视频一区二区三区 | 国产精品一二三区| 亚洲一区二区三区激情| 久久久久一区二区三区四区| 色婷婷av久久久久久久| 在线日韩欧美| 成人精品鲁一区一区二区| 亚洲成人免费电影| 国产日韩欧美一区二区三区乱码| 欧美亚洲国产怡红院影院| 99国产精品久久久久老师 | 国产在线精品一区二区| 夜色激情一区二区| 国产亚洲人成网站| 欧美日韩久久不卡| 亚洲综合精品| 亚洲黄色一区| 91蝌蚪国产九色| 国产成人免费视频网站| 青青草原综合久久大伊人精品| 亚洲日本乱码在线观看| 国产日本欧洲亚洲| 欧美一区二区日韩| 欧美日韩一级片网站| 久久久久欧美| 一本色道久久| 亚洲一级一区| 午夜国产欧美理论在线播放 | 国产亚洲在线| 一区二区自拍| 欧美精品偷拍| 不卡视频免费播放| 精品在线播放午夜| 午夜伦理一区二区| 一区二区三区中文字幕在线观看| 欧美激情中文字幕一区二区| 日韩一级免费观看| 欧美群妇大交群的观看方式| 色94色欧美sute亚洲线路一久| 国产欧美日韩一区二区三区| 狠狠色综合色区| 欧美国产一区二区三区激情无套| 成人不卡免费av| 精品一区二区影视| 捆绑变态av一区二区三区| 天堂精品中文字幕在线| 亚洲一区二区三区四区不卡| 亚洲丝袜自拍清纯另类| 国产精品毛片久久久久久久| 国产亚洲一二三区| 久久综合九色欧美综合狠狠| 欧美电视剧免费全集观看| 日韩一区二区三区精品视频| 欧美一区二区三区免费在线看| 欧美日韩国产一区| 在线91免费看| 日韩一区二区免费高清| 欧美一区二区视频在线观看2022 | 亚洲精品国产精品乱码不99| 亚洲欧美国产77777| 亚洲视频每日更新| 亚洲老司机在线| 亚洲精品免费在线观看| 亚洲综合男人的天堂| 亚洲一区二区三区国产| 麻豆久久久久久久| 亚洲欧美综合另类在线卡通| 亚洲天堂网中文字| 一区二区三区四区视频精品免费 | 欧美私人免费视频| 欧美日韩中文精品| 欧美日韩黄视频| 欧美精品aⅴ在线视频| 欧美一区二区视频观看视频| 欧美一区二区美女| 久久夜色精品国产噜噜av| 国产日韩精品一区| 亚洲国产精品二十页| 一色桃子久久精品亚洲| 亚洲免费观看高清完整版在线观看 | 欧美久久婷婷综合色| 欧美一区二区三区免费大片| 欧美电影精品一区二区| 久久久久久黄色| 国产精品不卡视频| 亚洲一区视频在线| 久久不见久久见中文字幕免费| 国产1区2区3区精品美女| 欧美在线播放一区|