Mybatis 一對(duì)多和多對(duì)一關(guān)聯(lián)查詢問題
首先 數(shù)據(jù)庫量表之間字段關(guān)系(沒有主外鍵)
studentmajor表的id字段對(duì)應(yīng)student表里major字段

兩個(gè)實(shí)體類
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 {
/**
* 全表查詢
*/
public List<Student> selectall();
/**
* 根據(jù)專業(yè)查人員,給一對(duì)多用
*/
public List<Student> selectz(Integer major);
}
package com.dao;
import java.util.List;
import com.model.StudentMajor;
public interface StudentMajorMapper {
/**
* 全表查詢
* @return
*/
public List<StudentMajor> selectAll();
/**
* 根據(jù)主鍵查數(shù)據(jù),給多對(duì)一用
* @param id
* @return
*/
public StudentMajor select(Integer id);
}
定義兩個(gè)實(shí)體類的映射方法
<?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ì)一查詢 -->
<resultMap type="Student" id="slist">
<!-- 跟一對(duì)一一樣用association標(biāo)簽,實(shí)體類定義的成員,要跟數(shù)據(jù)庫字段名對(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ù)專業(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ì)多查詢關(guān)聯(lián) -->
<resultMap type="StudentMajor" id="slist">
<!-- 實(shí)體類屬性對(duì)應(yīng)數(shù)據(jù)庫的主鍵字段,不然主鍵會(huì)查不到 -->
<id property="id" column="id"/>
<!-- 用collection標(biāo)簽 ,也是實(shí)體類屬性要對(duì)應(yīng)數(shù)據(jù)庫字段-->
<collection property="students" column="id"
select="com.dao.StudentMapper.selectz">
</collection>
</resultMap>
<!-- 全表查詢 -->
<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測試
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ì)多查詢
public void test() {
List<StudentMajor> list=smm.selectAll();
for(StudentMajor a:list){
System.out.println(a);
}
}
//根據(jù)專業(yè)查人員,給一對(duì)多用
public void selectz(){
List<Student> l=sm.selectz(3);
for(Student a:l){
System.out.println(a);
}
}
//多對(duì)一查詢
@Test
public void selectall() {
List<Student> st=sm.selectall();
for(Student tt:st){
System.out.println(tt);
}
}
//根據(jù)主鍵查詢,給多對(duì)一用
public void select(){
StudentMajor a=smm.select(1);
System.out.println(a);
}
}
一對(duì)多查詢結(jié)果

多對(duì)一查詢結(jié)果

以上所述是小編給大家介紹的Mybatis 一對(duì)多和多對(duì)一關(guān)聯(lián)查詢問題,希望對(duì)大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 在MyBatis中實(shí)現(xiàn)一對(duì)多查詢和多對(duì)一查詢的方式詳解(各兩種方式)
- Mybatis一對(duì)多和多對(duì)一處理的深入講解
- MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)
- Mybatis一對(duì)多與多對(duì)一查詢處理詳解
- MyBatisPlus 一對(duì)多、多對(duì)一、多對(duì)多的完美解決方案
- Mybatis關(guān)聯(lián)查詢之一對(duì)多和多對(duì)一XML配置詳解
- mybatis關(guān)系映射之一對(duì)多和多對(duì)一
- MyBatis中多對(duì)一和一對(duì)多數(shù)據(jù)的處理方法
相關(guān)文章
Java 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能簡單實(shí)例
這篇文章主要介紹了Java 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04
SSH框架網(wǎng)上商城項(xiàng)目第3戰(zhàn)之使用EasyUI搭建后臺(tái)頁面框架
SSH框架網(wǎng)上商城項(xiàng)目第3戰(zhàn)之使用EasyUI搭建后臺(tái)頁面框架,討論兩種搭建方式:基于frameset和基于easyUI,感興趣的小伙伴們可以參考一下2016-05-05
SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問服務(wù)的方法
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問服務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問題
背包問題是一個(gè)非常典型的考察動(dòng)態(tài)規(guī)劃應(yīng)用的題目,對(duì)其加上不同的限制和條件,可以衍生出諸多變種,若要全面理解動(dòng)態(tài)規(guī)劃,就必須對(duì)背包問題了如指掌2022-02-02
Java啟動(dòng)Tomcat的實(shí)現(xiàn)步驟
本文主要介紹了Java啟動(dòng)Tomcat的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
SpringBoot瘦身打包部署的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot瘦身打包部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
EDI中JAVA通過FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例
這篇文章主要介紹了EDI中JAVA通過FTP工具實(shí)現(xiàn)文件上傳下載實(shí)例,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11
Spring?MVC?請求映射路徑的配置實(shí)現(xiàn)前后端交互
在Spring?MVC中,請求映射路徑是指與特定的請求處理方法關(guān)聯(lián)的URL路徑,這篇文章主要介紹了Spring?MVC?請求映射路徑的配置,實(shí)現(xiàn)前后端交互,需要的朋友可以參考下2023-09-09

