• Mybatis多表查询


     在进行多表查询之前我们首先要建立多表关系:

    1.创建数据库表:

    表admin 管理员表

    表student 学生表

    表grade 年级表

    2.创建各自对应实体类

    注:

       Mybatis中涉及关联关系时直接在属性中关联对应对象,而不用像之前我们需要在实体类中定义关联对象的所有属性

    2.1 Admin

    1.  package com.ffyc.mybatisdemo.model;
    2.  ​
    3.  public class Admin {
    4.  ​
    5.       private int id;
    6.       private String account;
    7.       private String password;
    8.       private String xb;
    9.       private String adminPhone;
    10.       private Student student;  //此处直接关联Student对象
    11.  ​
    12.      public Student getStudent() {
    13.          return student;
    14.     }
    15.  ​
    16.      public void setStudent(Student student) {
    17.          this.student = student;
    18.     }
    19.  ​
    20.      public String getXb() {
    21.          return xb;
    22.     }
    23.  ​
    24.      public void setXb(String xb) {
    25.          this.xb = xb;
    26.     }
    27.  ​
    28.      public String getAdminPhone() {
    29.          return adminPhone;
    30.     }
    31.  ​
    32.      public void setAdminPhone(String adminPhone) {
    33.          this.adminPhone = adminPhone;
    34.     }
    35.  ​
    36.      public Admin() {
    37.          System.out.println("Admin无参构造");
    38.     }
    39.  ​
    40.      public Admin(String account, String password, String gender) {
    41.          this.account = account;
    42.          this.password = password;
    43.          this.xb = gender;
    44.     }
    45.  ​
    46.      public int getId() {
    47.          return id;
    48.     }
    49.  ​
    50.      public void setId(int id) {
    51.          System.out.println("SetId");
    52.          this.id = id;
    53.     }
    54.  ​
    55.      public String getAccount() {
    56.          return account;
    57.     }
    58.  ​
    59.      public void setAccount(String account) {
    60.          this.account = account;
    61.     }
    62.  ​
    63.      public String getPassword() {
    64.          return password;
    65.     }
    66.  ​
    67.      public void setPassword(String password) {
    68.          this.password = password;
    69.     }
    70.  ​
    71.  ​
    72.      @Override
    73.      public String toString() {
    74.          return "Admin{" +
    75.                  "id=" + id +
    76.                  ", account='" + account + '\'' +
    77.                  ", password='" + password + '\'' +
    78.                  ", xb='" + xb + '\'' +
    79.                  ", adminPhone='" + adminPhone + '\'' +
    80.                  '}';
    81.     }
    82.  }
    83.  ​

    2.2 studnet

    1.  package com.ffyc.mybatisdemo.model;
    2.  ​
    3.  public class Student {
    4.  ​
    5.       private Integer id;
    6.       private Integer no;
    7.       private String name;
    8.       private String gender;
    9.       private int gradeid;
    10.       private int adminid;
    11.       private Grade grade;
    12.       private Admin admin;
    13.  ​
    14.      public Integer getId() {
    15.          return id;
    16.     }
    17.  ​
    18.      public void setId(int id) {
    19.          this.id = id;
    20.     }
    21.  ​
    22.      public Integer getNo() {
    23.          return no;
    24.     }
    25.  ​
    26.      public void setNo(int no) {
    27.          this.no = no;
    28.     }
    29.  ​
    30.      public String getName() {
    31.          return name;
    32.     }
    33.  ​
    34.      public void setName(String name) {
    35.          this.name = name;
    36.     }
    37.  ​
    38.      public String getGender() {
    39.          return gender;
    40.     }
    41.  ​
    42.      public void setGender(String gender) {
    43.          this.gender = gender;
    44.     }
    45.  ​
    46.      public int getGradeid() {
    47.          return gradeid;
    48.     }
    49.  ​
    50.      public void setGradeid(int gradeid) {
    51.          this.gradeid = gradeid;
    52.     }
    53.  ​
    54.      public int getAdminid() {
    55.          return adminid;
    56.     }
    57.  ​
    58.      public void setAdminid(int adminid) {
    59.          this.adminid = adminid;
    60.     }
    61.  ​
    62.      @Override
    63.      public String toString() {
    64.          return "Student{" +
    65.                  "id=" + id +
    66.                  ", no=" + no +
    67.                  ", name='" + name + '\'' +
    68.                  ", gender='" + gender + '\'' +
    69.                  ", gradeid=" + gradeid +
    70.                  ", adminid=" + adminid +
    71.                  ", grade=" + grade +
    72.                  ", admin=" + admin +
    73.                  '}';
    74.     }
    75.  }
    76.  ​

    2.3 grade

     
    1. package com.ffyc.mybatisdemo.model;
    2.  ​
    3.  import java.util.List;
    4.  ​
    5.  public class Grade {
    6.  ​
    7.       private int id;
    8.       private String name;
    9.       private List students;
    10.  ​
    11.      public int getId() {
    12.          return id;
    13.     }
    14.  ​
    15.      public void setId(int id) {
    16.          this.id = id;
    17.     }
    18.  ​
    19.      public String getName() {
    20.          return name;
    21.     }
    22.  ​
    23.      public void setName(String name) {
    24.          this.name = name;
    25.     }
    26.  ​
    27.      public List getStudents() {
    28.          return students;
    29.     }
    30.  ​
    31.      public void setStudents(List students) {
    32.          this.students = students;
    33.     }
    34.  ​
    35.      @Override
    36.      public String toString() {
    37.          return "Grade{" +
    38.                  "id=" + id +
    39.                  ", name='" + name + '\'' +
    40.                  ", students=" + students +
    41.                  '}';
    42.     }
    43.  }
    44.  ​

    一对多关系查询

    1.接口中的方法:

    1.  //一对多关系查询
    2.      List findGradelist();

    2.mapper.xml:

    1.  "1.0" encoding="UTF-8" ?>
    2.  mapper
    3.          PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4.          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5.  <mapper namespace="com.ffyc.mybatisdemo.dao.GradeDao">
    6.      <resultMap id="GradeMap" type="Grade">
    7.          <id column="id" property="id">id>
    8.          <result column="name" property="name">result>
    9.          <collection property="students" javaType="list" ofType="Student">
    10.              <id column="sid" property="id">id>
    11.              <result column="sname" property="name">result>
    12.          collection>
    13.      resultMap>
    14.      <select id="findGradelist" resultMap="GradeMap">
    15.         SELECT g.id,g.name,s.id sid,s.name sname
    16.         FROM grade g LEFT JOIN student s
    17.         ON s.gradeid = g.id
    18.      select>
    19.  mapper>

    注:

    此处使用到了resultMap中的新属性:

    • collection: 一对多关系结果集映射

    • association: 多对一关系结果集映射

    3.测试类:

     
    1. package com.ffyc.mybatisdemo.test;
    2.  ​
    3.  import com.ffyc.mybatisdemo.dao.GradeDao;
    4.  import com.ffyc.mybatisdemo.dao.StudentDao;
    5.  import com.ffyc.mybatisdemo.model.Grade;
    6.  import com.ffyc.mybatisdemo.model.Student;
    7.  import com.ffyc.mybatisdemo.util.MybatisUtil;
    8.  import org.apache.ibatis.session.SqlSession;
    9.  import org.junit.Test;
    10.  ​
    11.  import java.util.List;
    12.  ​
    13.  /*
    14.      多表查询 1对多
    15.   */
    16.  public class TestGrade {
    17.  ​
    18.      @Test
    19.      public void findGrade() {
    20.          SqlSession sqlSession = MybatisUtil.getSqlSession();
    21.          GradeDao GradeDao = sqlSession.getMapper(GradeDao.class);
    22.          List grades = GradeDao.findGradelist();
    23.          System.out.println(grades);
    24.          sqlSession.close();
    25.     }
    26.  }
    27.  ​

    多对一结果查询

    1.接口中的方法:

    1.  //多对一关系查询
    2.       Student findStudentById(int id);

    2.mapper.xml文件:

    1.  "1.0" encoding="UTF-8" ?>
    2.  mapper
    3.          PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4.          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5.  <mapper namespace="com.ffyc.mybatisdemo.dao.StudentDao">
    6.      
    7.      <sql id="selectStudent">
    8.         SELECT s.id,s.name,s.gender,g.name gname
    9.             FROM student s
    10.             LEFT JOIN grade g
    11.             ON s.gradeid = g.id
    12.             LEFT JOIN admin a
    13.             ON s.adminid = a.id
    14.      sql>
    15.      
    16.      <resultMap id="StudentMap" type="Student">
    17.          <association property="gender" javaType="Grade">
    18.              <result column="gname" property="name">result>
    19.          association>
    20.      resultMap>
    21.      <select id="findStudentById" resultType="com.ffyc.mybatisdemo.model.Student">
    22.              <include refid="selectStudent">include>
    23.             where s.id = #{id}
    24.      select>
    25.      
    26.  mapper>

    3.测试类:

    1.  package com.ffyc.mybatisdemo.test;
    2.  ​
    3.  import com.ffyc.mybatisdemo.dao.AdminDao;
    4.  import com.ffyc.mybatisdemo.dao.StudentDao;
    5.  import com.ffyc.mybatisdemo.dao.StudentDao2;
    6.  import com.ffyc.mybatisdemo.model.Admin;
    7.  import com.ffyc.mybatisdemo.model.Student;
    8.  import com.ffyc.mybatisdemo.util.MybatisUtil;
    9.  import org.apache.ibatis.session.SqlSession;
    10.  import org.junit.Test;
    11.  ​
    12.  import java.util.ArrayList;
    13.  import java.util.List;
    14.  ​
    15.  /*
    16.      多表查询 多对1
    17.   */
    18.  public class TestStudent {
    19.  ​
    20.      @Test
    21.      //单独使用resultMap处理
    22.      public void findStudentlist() {
    23.          SqlSession sqlSession = MybatisUtil.getSqlSession();
    24.          StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
    25.          Student student = new Student();
    26.          List students = studentDao.findStudentlist(student);
    27.          System.out.println(students);
    28.          sqlSession.close();
    29.     }
    30.  }
    31.  ​

  • 相关阅读:
    STM8的C语言编程(1)--基本程序与启动代码分析
    在Spring Boot中实现类似SPI机制的功能(二)
    web安全渗透测试十大常规项(一):web渗透测试之任意文件读取
    SAS常用函数
    题目 1063: 二级C语言-统计字符
    正则表达式练习
    javaweb:mybatis:mapper(sql映射+代理开发+配置文件之设置别名、多环境配置、顺序+注解开发)
    【图文并茂】C++介绍之串
    CPU型号参数和SAS卡参数说明
    Golang sync/atomic 包的原子操作说明
  • 原文地址:https://blog.csdn.net/weixin_52629592/article/details/125843713