Mybatis 一對(duì)多和多對(duì)一關(guān)聯(lián)查詢(xún)問(wèn)題
首先 數(shù)據(jù)庫(kù)量表之間字段關(guān)系(沒(méi)有主外鍵)
studentmajor表的id字段對(duì)應(yīng)student表里major字段
兩個(gè)實(shí)體類(lèi)
package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmajor; public Student() { super(); } public Student(Integer sno, String sname, String ssex, Integer sclass, StudentMajor studentmajor) { super(); this.sno = sno; this.sname = sname; this.ssex = ssex; this.sclass = sclass; this.studentmajor = studentmajor; } public StudentMajor getStudentmajor() { return studentmajor; } public void setStudentmajor(StudentMajor studentmajor) { this.studentmajor = studentmajor; } public Integer getSno() { return sno; } public void setSno(Integer sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSsex() { return ssex; } public void setSsex(String ssex) { this.ssex = ssex; } @Override public String toString() { return "Student [sno=" + sno + ", sname=" + sname + ", ssex=" + ssex + ", sclass=" + sclass + ", studentmajor=" + studentmajor + "]"; } public Integer getSclass() { return sclass; } public void setSclass(Integer sclass) { this.sclass = sclass; } }
package com.model; import java.util.List; public class StudentMajor { private Integer id; private String mcode; private String mname; private List<Student> students; public StudentMajor() { super(); } public StudentMajor(Integer id, String mcode, String mname, List<Student> students) { super(); this.id = id; this.mcode = mcode; this.mname = mname; this.students = students; } @Override public String toString() { return "StudentMajor [id=" + id + ", mcode=" + mcode + ", mname=" + mname + ", students=" + students + "]"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMcode() { return mcode; } public void setMcode(String mcode) { this.mcode = mcode; } public String getMname() { return mname; } public void setMname(String mname) { this.mname = mname; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }
定義兩個(gè)接口
package com.dao; import java.util.List; import java.util.Map; import com.model.Student; public interface StudentMapper { /** * 全表查詢(xún) */ public List<Student> selectall(); /** * 根據(jù)專(zhuān)業(yè)查人員,給一對(duì)多用 */ public List<Student> selectz(Integer major); }
package com.dao; import java.util.List; import com.model.StudentMajor; public interface StudentMajorMapper { /** * 全表查詢(xún) * @return */ public List<StudentMajor> selectAll(); /** * 根據(jù)主鍵查數(shù)據(jù),給多對(duì)一用 * @param id * @return */ public StudentMajor select(Integer id); }
定義兩個(gè)實(shí)體類(lèi)的映射方法
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.StudentMapper"> <!-- 多對(duì)一查詢(xún) --> <resultMap type="Student" id="slist"> <!-- 跟一對(duì)一一樣用association標(biāo)簽,實(shí)體類(lèi)定義的成員,要跟數(shù)據(jù)庫(kù)字段名對(duì)應(yīng)上 --> <association property="studentmajor" column="major" select="com.dao.StudentMajorMapper.select"/> <!-- 用接口里定義的方法,根據(jù)student表中的major字段查出對(duì)應(yīng)數(shù)據(jù) --> </resultMap> <!-- 查全部 --> <select id="selectall" resultMap="slist" > select * from student </select> <!-- 根據(jù)專(zhuān)業(yè)查人員 --> <select id="selectz" parameterType="Integer" resultType="student"> select * from student s where s.major=#{major} </select> </mapper>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.StudentMajorMapper"> <!-- 一對(duì)多查詢(xún)關(guān)聯(lián) --> <resultMap type="StudentMajor" id="slist"> <!-- 實(shí)體類(lèi)屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)的主鍵字段,不然主鍵會(huì)查不到 --> <id property="id" column="id"/> <!-- 用collection標(biāo)簽 ,也是實(shí)體類(lèi)屬性要對(duì)應(yīng)數(shù)據(jù)庫(kù)字段--> <collection property="students" column="id" select="com.dao.StudentMapper.selectz"> </collection> </resultMap> <!-- 全表查詢(xún) --> <select id="selectAll" resultMap="slist"> select * from studentmajor </select> <!-- 根據(jù)主鍵查 --> <select id="select" parameterType="Integer" resultType="StudentMajor"> select * from studentmajor where id=#{id} </select> </mapper>
JUnit測(cè)試
package com.util; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.dao.StudentMajorMapper; import com.dao.StudentMapper; import com.model.Student; import com.model.StudentMajor; public class JJJtest { private SqlSession ss; private StudentMapper sm; private StudentMajorMapper smm; @Before public void setUp() throws Exception { ss=SqlSessionUtil.getSqlSession(); sm=ss.getMapper(StudentMapper.class); smm=ss.getMapper(StudentMajorMapper.class); } @After public void tearDown() throws Exception { ss.commit(); ss.close(); } //一對(duì)多查詢(xún) public void test() { List<StudentMajor> list=smm.selectAll(); for(StudentMajor a:list){ System.out.println(a); } } //根據(jù)專(zhuān)業(yè)查人員,給一對(duì)多用 public void selectz(){ List<Student> l=sm.selectz(3); for(Student a:l){ System.out.println(a); } } //多對(duì)一查詢(xún) @Test public void selectall() { List<Student> st=sm.selectall(); for(Student tt:st){ System.out.println(tt); } } //根據(jù)主鍵查詢(xún),給多對(duì)一用 public void select(){ StudentMajor a=smm.select(1); System.out.println(a); } }
一對(duì)多查詢(xún)結(jié)果
多對(duì)一查詢(xún)結(jié)果
以上所述是小編給大家介紹的Mybatis 一對(duì)多和多對(duì)一關(guān)聯(lián)查詢(xún)問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 在MyBatis中實(shí)現(xiàn)一對(duì)多查詢(xún)和多對(duì)一查詢(xún)的方式詳解(各兩種方式)
- Mybatis一對(duì)多和多對(duì)一處理的深入講解
- MyBatis如何實(shí)現(xiàn)多表查詢(xún)(多對(duì)一、一對(duì)多)
- Mybatis一對(duì)多與多對(duì)一查詢(xún)處理詳解
- MyBatisPlus 一對(duì)多、多對(duì)一、多對(duì)多的完美解決方案
- Mybatis關(guān)聯(lián)查詢(xún)之一對(duì)多和多對(duì)一XML配置詳解
- mybatis關(guān)系映射之一對(duì)多和多對(duì)一
- MyBatis中多對(duì)一和一對(duì)多數(shù)據(jù)的處理方法
相關(guān)文章
Java 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能簡(jiǎn)單實(shí)例
這篇文章主要介紹了Java 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04SSH框架網(wǎng)上商城項(xiàng)目第3戰(zhàn)之使用EasyUI搭建后臺(tái)頁(yè)面框架
SSH框架網(wǎng)上商城項(xiàng)目第3戰(zhàn)之使用EasyUI搭建后臺(tái)頁(yè)面框架,討論兩種搭建方式:基于frameset和基于easyUI,感興趣的小伙伴們可以參考一下2016-05-05SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問(wèn)服務(wù)的方法
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問(wèn)服務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問(wèn)題
背包問(wèn)題是一個(gè)非常典型的考察動(dòng)態(tài)規(guī)劃應(yīng)用的題目,對(duì)其加上不同的限制和條件,可以衍生出諸多變種,若要全面理解動(dòng)態(tài)規(guī)劃,就必須對(duì)背包問(wèn)題了如指掌2022-02-02Java啟動(dòng)Tomcat的實(shí)現(xiàn)步驟
本文主要介紹了Java啟動(dòng)Tomcat的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05SpringBoot瘦身打包部署的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot瘦身打包部署的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04EDI中JAVA通過(guò)FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例
這篇文章主要介紹了EDI中JAVA通過(guò)FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11Spring?MVC?請(qǐng)求映射路徑的配置實(shí)現(xiàn)前后端交互
在Spring?MVC中,請(qǐng)求映射路徑是指與特定的請(qǐng)求處理方法關(guān)聯(lián)的URL路徑,這篇文章主要介紹了Spring?MVC?請(qǐng)求映射路徑的配置,實(shí)現(xiàn)前后端交互,需要的朋友可以參考下2023-09-09