全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Mybatis 一对多和多对一关联查询问题

首先  数据库量表之间字段关系(没有主外键)

studentmajor表的id字段对应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();
  /**
   * 根据专业查人员,给一对多用
   */
  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();
  /**
   * 根据主键查数据,给多对一用
   * @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标签,实体类定义的成员,要跟数据库字段名对应上 -->
    <association property="studentmajor" column="major" 
    select="com.dao.StudentMajorMapper.select"/> <!-- 用接口里定义的方法,根据student表中的major字段查出对应数据 -->
  </resultMap>
  <!-- 查全部 -->
  <select id="selectall" resultMap="slist" >
    select * from student
  </select>
  <!-- 根据专业查人员 -->
  <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">
   <!-- 一对多查询关联 -->
   <resultMap type="StudentMajor" id="slist">
     <!-- 实体类属性对应数据库的主键字段,不然主键会查不到 -->
     <id property="id" column="id"/>
     <!-- 用collection标签 ,也是实体类属性要对应数据库字段-->
     <collection property="students" column="id"
     select="com.dao.StudentMapper.selectz">
     </collection>  
   </resultMap>
   <!-- 全表查询 -->
   <select id="selectAll" resultMap="slist">
     select * from studentmajor
   </select>
   <!-- 根据主键查 -->
   <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);
    }
  }
  //根据专业查人员,给一对多用
  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);
    }
  }
  //根据主键查询,给多对一用
  public void select(){
    StudentMajor a=smm.select(1);
    System.out.println(a);
  }
}

一对多查询结果

多对一查询结果

以上所述是小编给大家介绍的Mybatis 一对多和多对一关联查询问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# mybatis一对多  # mybatis多对一  # mybatis  # 关联查询  # 关于QueryWrapper  # 实现MybatisPlus多表关联查询方式  # Mybatis多表关联查询的实现(DEMO)  # mybatis-plus多表关联查询功能的实现  # mybatis如何使用注解实现一对多关联查询  # MyBatis实践之动态SQL及关联查询  # MyBatis 三表外关联查询的实现(用户、角色、权限)  # Mybatis关联查询之一对多和多对一XML配置详解  # Mybatis实现一对一、一对多关联查询的方法(示例详解)  # Mybatis-Plus多表关联查询的使用案例解析  # MyBatis的关联查询实现(一对一、一对多、多对多)  # 主键  # 实体类  # 查询结果  # 小编  # 在此  # 给大家  # 要对  # 要跟  # 所述  # 给我留言  # 感谢大家  # 量表  # 疑问请  # 有任何  # 字段名  # setSname  # getSname  # getSsex  # toString  # Override 


相关文章: 网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  定制建站如何定义?其核心优势是什么?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  智能起名网站制作软件有哪些,制作logo的软件?  淘宝制作网站有哪些,淘宝网官网主页?  网站制作员失业,怎样查看自己网站的注册者?  建站之星安装后如何配置SEO及设计样式?  北京网站制作的公司有哪些,北京白云观官方网站?  建站org新手必看:2024最新搭建流程与模板选择技巧  制作网站的软件免费下载,免费制作app哪个平台好?  如何通过VPS搭建网站快速盈利?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何快速辨别茅台真假?关键步骤解析  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  贸易公司网站制作流程,出口贸易网站设计怎么做?  用v-html解决Vue.js渲染中html标签不被解析的问题  威客平台建站流程解析:高效搭建教程与设计优化方案  临沂网站制作公司有哪些,临沂第四中学官网?  创业网站制作流程,创业网站可靠吗?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何生成腾讯云建站专用兑换码?  如何快速建站并高效导出源代码?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  三星网站视频制作教程下载,三星w23网页如何全屏?  ,购物网站怎么盈利呢?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  微信h5制作网站有哪些,免费微信H5页面制作工具?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在云指建站中生成FTP站点?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何高效完成自助建站业务培训?  建站之星如何防范黑客攻击与数据泄露?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何快速搭建高效WAP手机网站吸引移动用户?  网站制作说明怎么写,简述网页设计的流程并说明原因?  javascript基本数据类型及类型检测常用方法小结  建站主机服务器选购指南:轻量应用与VPS配置解析  ui设计制作网站有哪些,手机UI设计网址吗?  高端建站三要素:定制模板、企业官网与响应式设计优化  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何零成本快速生成个人自助网站?  如何安全更换建站之星模板并保留数据?  建站主机是什么?如何选择适合的建站主机?  已有域名和空间如何快速搭建网站?  建站之星下载版如何获取与安装?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何快速完成中国万网建站详细流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。