日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

MyBatis實現(xiàn)多表查詢

一、多對一查詢

數(shù)據(jù)庫的準(zhǔn)備

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

創(chuàng)建兩張表,一張老師表,一張學(xué)生表

將老師主鍵id關(guān)聯(lián)學(xué)生外鍵tid

創(chuàng)建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)//建立主外鍵關(guān)聯(lián)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)

項目結(jié)構(gòu)

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

使用Lombok插件,創(chuàng)建實體類。

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

@Datapublic class Student { private int id; private String name; //學(xué)生需要關(guān)聯(lián)一個老師 private Teacher teacher;}

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

1、嵌套查詢處理

編寫接口

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

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

<mapper namespace='dao.StudentMapper'><!-- 思路:1. 查詢所有學(xué)生的信息根據(jù)查詢出來的學(xué)生tid,尋找對應(yīng)的老師--> <select resultMap='StudentTeacher'> select * from student </select> <resultMap type='pojo.Student'><!--復(fù)雜的屬性需要單獨處理 是對象就使用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(); }

測試結(jié)果

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

2、聯(lián)合查詢處理

編寫接口

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

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

<!-- 按照結(jié)果嵌套處理--> <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(); }

測試結(jié)果

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

二、一對多查詢

更改實體類

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

@Datapublic class Teacher { private int id; private String name; //一個老師擁有多個學(xué)生 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(); }

測試結(jié)果:

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

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、聯(lián)合查詢處理

編寫接口

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

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

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

<!-- 按結(jié)果嵌套查詢--> <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'/><!--復(fù)雜的屬性需要單獨處理 是對象就使用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(); }

測試結(jié)果:

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

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)])總結(jié):

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

官方文檔也給了詳細(xì)的非常復(fù)雜的多表查詢?nèi)缦拢?mybatis,這么復(fù)雜的看的我頭疼

<!-- 非常復(fù)雜的語句 --><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 在初學(xué)的時候盡量不要給實體類取別名,為了不要混淆,加深理解 實體類字段要和數(shù)據(jù)庫字段一致,如果不一致,那就要用result標(biāo)簽做映射 復(fù)雜的屬性需要單獨處理,是對象就使用association,是集合就使用collection來映射 javaType='' 指定的屬性類型| 集合中的泛型信息,使用ofType獲取 多注意復(fù)雜屬性的嵌套使用

JavaType & ofType

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

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

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩美女精品| 九一精品国产| 日本国产精品| 激情欧美日韩一区| 久久人人97超碰国产公开结果| 欧美亚洲综合视频| 只有精品亚洲| 日韩精品中文字幕一区二区| 最新中文字幕在线播放| 国产麻豆精品| 久久69成人| 国产日韩高清一区二区三区在线 | 91精品国产调教在线观看| 欧美精品91| 欧美三级第一页| 美美哒免费高清在线观看视频一区二区 | 激情国产在线| 成人日韩av| 日本免费久久| 国产精品地址| 国产精品极品| 色爱综合网欧美| 快播电影网址老女人久久| 日韩不卡免费高清视频| 亚洲欧美日韩在线观看a三区| 亚洲九九精品| 国产精品视频一区二区三区四蜜臂| 国产美女高潮在线| 日韩不卡免费高清视频| 一级欧洲+日本+国产| 欧美日韩国产免费观看视频| 亚洲精品小说| 亚洲精品在线二区| 国产一区二区三区四区| 欧美91在线| 日韩欧美一区二区三区在线观看 | 蜜臀av在线播放一区二区三区| 日韩中文字幕一区二区三区| 日本中文字幕一区二区| 欧美国产极品| 亚洲网站视频| 亚洲在线网站| 91精品在线免费视频| 91精品一区| 黄色在线网站噜噜噜| 亚洲激情五月| 亚洲综合另类| 欧美激情视频一区二区三区免费| 精品国产一区二区三区噜噜噜| 日韩中文欧美| 亚洲人www| 日韩精品永久网址| 97se综合| 亚洲久久视频| 欧美日韩视频网站| 日韩中文字幕麻豆| 欧美精品二区| 欧美成人精品| 久久国产三级| 91视频一区| 四虎精品一区二区免费| 三上悠亚国产精品一区二区三区 | 国内精品99| 国产日本精品| 亚洲二区在线| 黑人精品一区| 日韩精品1区2区3区| 精品捆绑调教一区二区三区| 日韩激情网站| 在线亚洲人成| 亚洲麻豆一区| а√天堂8资源在线| 国产欧美一级| 久久高清免费观看| 精品国产18久久久久久二百| 亚洲理论在线| 国产精品专区免费| 日韩在线观看中文字幕| 欧洲一级精品| 国产精品久一| 日韩欧美高清一区二区三区| 999久久久91| 欧美黑人做爰爽爽爽| 日本欧美韩国一区三区| 欧美aⅴ一区二区三区视频| 伊人久久大香线蕉av超碰演员| 欧美成人基地| 久久精品国产久精国产| 亚洲欧美日本日韩| 夜夜嗨一区二区| 在线精品亚洲欧美日韩国产| 日韩成人在线看| 日韩av一二三| 美国欧美日韩国产在线播放| 亚洲天堂资源| 成人精品亚洲| 国产成人免费视频网站视频社区| 亚洲精品极品| 亚洲一区二区三区在线免费| 国产亚洲一卡2卡3卡4卡新区| 午夜精品网站| 亚洲二区免费| 久久91导航| 免费污视频在线一区| 久久久久久夜| 精品视频免费| 9999国产精品| 精品免费av一区二区三区| 国产亚洲精品美女久久| 国产区精品区| 国产欧美日韩精品高清二区综合区| 亚洲欧美久久精品| 亚洲一区二区三区免费在线观看| 欧美日韩一二三四| 国产成人精选| 成人三级高清视频在线看| 日韩高清电影免费| 在线精品国产亚洲| 日韩1区2区| 精品三级av在线导航| 精品美女视频 | 国产精品日本一区二区三区在线| 国产精品99久久免费观看| 岛国精品一区| 亚洲不卡系列| 久久午夜精品一区二区| 亚洲我射av| 日本成人中文字幕在线视频| 久久97视频| 巨乳诱惑日韩免费av| 日韩av不卡在线观看| 精品福利久久久| 欧美日韩国产一区精品一区| 久久国产视频网| 九九精品调教| 日韩高清成人在线| 蜜桃成人精品| 日韩欧美精品一区二区综合视频| 国产精品大片| 夜久久久久久| 国产精品一区毛片| 国产精品一站二站| 日韩三区在线| 亚洲精品欧美| 欧美日韩视频免费观看| 日韩亚洲精品在线观看| 国模精品一区| 国产亚洲在线| 精品视频一二| 最新亚洲激情| 亚洲一区二区动漫| 精品丝袜久久| 99精品视频精品精品视频| 欧美freesex黑人又粗又大| 99精品电影| 久久国产欧美日韩精品| 香蕉精品视频在线观看| 国产精品v日韩精品v欧美精品网站 | 午夜在线播放视频欧美| 久久天堂成人| 国产精品亚洲综合久久| 国产九九精品| 亚洲欧美日韩国产| 日韩午夜黄色| 国产精品毛片久久| 国产亚洲永久域名| 97精品国产| 国产精品一区三区在线观看| 国产精品久久久久久久久久妞妞| 91欧美国产| 欧洲一级精品| 久久久免费人体| 久久久久美女| 国际精品欧美精品| 欧美日韩一区二区三区在线电影| 久久的色偷偷| 日韩高清一区在线| 国产欧美日韩精品高清二区综合区 | 美女精品视频在线| 精品国产网站| 国产精品一区亚洲| 国产一区二区精品福利地址| 夜夜精品视频| 首页国产精品| 国产欧美一区二区色老头| 丝袜亚洲另类欧美| 日韩av电影一区| 伊人久久婷婷| 亚洲精品在线国产| 国产精品伦一区二区| 日韩.com| 国产精品日本| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 久久国产精品色av免费看| 午夜欧美精品| 国产欧美一区二区三区精品酒店| 国产探花在线精品一区二区| 免费看欧美美女黄的网站| 国产精品天天看天天狠| 国产日韩欧美一区二区三区在线观看|