最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis 一對多和多對一關(guān)聯(lián)查詢問題

 更新時間:2017年04月23日 14:12:31   作者:濫好人  
這篇文章主要介紹了Mybatis 一對多和多對一關(guān)聯(lián)查詢問題,需要的朋友可以參考下

首先  數(shù)據(jù)庫量表之間字段關(guān)系(沒有主外鍵)

studentmajor表的id字段對應(yīng)student表里major字段

兩個實體類

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;
  }
}

定義兩個接口

package com.dao;
import java.util.List;
import java.util.Map;
import com.model.Student;
public interface StudentMapper {
  /**
   * 全表查詢
   */
  public List<Student> selectall();
  /**
   * 根據(jù)專業(yè)查人員,給一對多用
   */
  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ù),給多對一用
   * @param id
   * @return
   */
  public StudentMajor select(Integer id);
}

定義兩個實體類的映射方法

<?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">
  <!-- 多對一查詢 -->
  <resultMap type="Student" id="slist">
    <!-- 跟一對一一樣用association標簽,實體類定義的成員,要跟數(shù)據(jù)庫字段名對應(yīng)上 -->
    <association property="studentmajor" column="major" 
    select="com.dao.StudentMajorMapper.select"/> <!-- 用接口里定義的方法,根據(jù)student表中的major字段查出對應(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">
   <!-- 一對多查詢關(guān)聯(lián) -->
   <resultMap type="StudentMajor" id="slist">
     <!-- 實體類屬性對應(yīng)數(shù)據(jù)庫的主鍵字段,不然主鍵會查不到 -->
     <id property="id" column="id"/>
     <!-- 用collection標簽 ,也是實體類屬性要對應(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();
  }
  //一對多查詢
  public void test() {
    List<StudentMajor> list=smm.selectAll();
    for(StudentMajor a:list){
      System.out.println(a);
    }
  }
  //根據(jù)專業(yè)查人員,給一對多用
  public void selectz(){
    List<Student> l=sm.selectz(3);
    for(Student a:l){
      System.out.println(a);
    }
  }
  //多對一查詢
  @Test
  public void selectall() {
    List<Student> st=sm.selectall();
    for(Student tt:st){
      System.out.println(tt);
    }
  }
  //根據(jù)主鍵查詢,給多對一用
  public void select(){
    StudentMajor a=smm.select(1);
    System.out.println(a);
  }
}

一對多查詢結(jié)果

多對一查詢結(jié)果

以上所述是小編給大家介紹的Mybatis 一對多和多對一關(guān)聯(lián)查詢問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Maven繼承父工程時的relativePath標簽解析用法小結(jié)

    Maven繼承父工程時的relativePath標簽解析用法小結(jié)

    relativePath 的作用是為了找到父級工程的pom.xml,本文主要介紹了Maven繼承父工程時的relativePath標簽解析用法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java數(shù)組轉(zhuǎn)換為逗號分隔字符串的三種方法

    Java數(shù)組轉(zhuǎn)換為逗號分隔字符串的三種方法

    這篇文章主要介紹了Java中三種將數(shù)組轉(zhuǎn)為逗號分隔字符串的方法:方法1通用但含括號,方法2專用于字符串?dāng)?shù)組高效,方法3靈活但性能較差,建議根據(jù)數(shù)組類型選擇String.join()或Arrays.toString(),需要的朋友可以參考下
    2025-09-09
  • Springboot整合knife4j與shiro的操作

    Springboot整合knife4j與shiro的操作

    這篇文章主要介紹了Springboot整合knife4j與shiro的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot + minio實現(xiàn)分片上傳、秒傳、續(xù)傳功能

    SpringBoot + minio實現(xiàn)分片上傳、秒傳、續(xù)傳功能

    MinIO是一個基于Go實現(xiàn)的高性能、兼容S3協(xié)議的對象存儲,使用MinIO構(gòu)建用于機器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負載的高性能基礎(chǔ)架構(gòu),這篇文章主要介紹了SpringBoot + minio實現(xiàn)分片上傳、秒傳、續(xù)傳,需要的朋友可以參考下
    2023-06-06
  • @MapperScan注解與@Mapper注解的使用

    @MapperScan注解與@Mapper注解的使用

    這篇文章主要介紹了@MapperScan注解與@Mapper注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解Java并發(fā)包中線程池ThreadPoolExecutor

    詳解Java并發(fā)包中線程池ThreadPoolExecutor

    ThreadPoolExecutor是Java語言對于線程池的實現(xiàn)。線程池技術(shù)使線程在使用完畢后不回收而是重復(fù)利用。如果線程能夠復(fù)用,那么我們就可以使用固定數(shù)量的線程來解決并發(fā)問題,這樣一來不僅節(jié)約了系統(tǒng)資源,而且也會減少線程上下文切換的開銷
    2021-06-06
  • SpringBoot啟動后執(zhí)行方法的五種實現(xiàn)方式

    SpringBoot啟動后執(zhí)行方法的五種實現(xiàn)方式

    本文介紹了SpringBoot中五種在項目啟動后執(zhí)行方法的方式,包括實現(xiàn)CommandLineRunner和ApplicationRunner接口、實現(xiàn)ApplicationListener接口、使用@PostConstruct注解以及實現(xiàn)InitializingBean接口,每種方式都有其特點和適用場景
    2025-02-02
  • 多個JDK版本(Java 8、Java 17、Java 21)下載和切換

    多個JDK版本(Java 8、Java 17、Java 21)下載和切換

    為了在實際中可以任意選擇所需的JDK版本,需要將多個JDK版本進行切換,本文主要介紹了多個JDK版本(Java 8、Java 17、Java 21)下載和切換,感興趣的可以了解一下
    2025-04-04
  • SpringBoot中的@CrossOrigin注解詳解

    SpringBoot中的@CrossOrigin注解詳解

    這篇文章主要介紹了SpringBoot中的@CrossOrigin注解詳解,跨源資源共享(CORS)是由大多數(shù)瀏覽器實現(xiàn)的W3C規(guī)范,允許您靈活地指定什么樣的跨域請求被授權(quán),而不是使用一些不太安全和不太強大的策略,需要的朋友可以參考下
    2023-11-11
  • Springboot如何添加server.servlet.context-path相關(guān)使用

    Springboot如何添加server.servlet.context-path相關(guān)使用

    這篇文章主要介紹了Springboot如何添加server.servlet.context-path相關(guān)使用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

中西区| 双流县| 尉犁县| 余姚市| 长海县| 岗巴县| 广饶县| 隆回县| 黄浦区| 山阴县| 龙南县| 剑川县| 斗六市| 大渡口区| 青铜峡市| 凉城县| 平潭县| 阳新县| 栖霞市| 望江县| 江都市| 肥东县| 福州市| 陈巴尔虎旗| 防城港市| 西吉县| 江津市| 封丘县| 韶关市| 伊春市| 伊宁县| 定安县| 科技| 彭州市| 涡阳县| 米易县| 梨树县| 钟祥市| 南汇区| 龙山县| 阿拉尔市|