遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

MyBatis简易教程(04):mybatis关联映射(一对多、多对一)

 

MyBatis简易教程汇总,详见https://www.cnblogs.com/uncleyong/p/17984096

准备测试数据

班级表

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES ('1', 'java');
INSERT INTO `classes` VALUES ('2', 'python');

  

学生表

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
  `s_id` int(11) NOT NULL AUTO_INCREMENT,
  `s_name` varchar(255) DEFAULT NULL,
  `s_age` int(11) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`s_id`),
  KEY `fk_class_id` (`class_id`),
  CONSTRAINT `fk_class_id` FOREIGN KEY (`class_id`) REFERENCES `classes` (`c_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES ('1', 'jack', '18', '1');
INSERT INTO `students` VALUES ('2', 'tom', '19', '2');
INSERT INTO `students` VALUES ('3', 'laowang', '20', '1');
INSERT INTO `students` VALUES ('4', 'liming', '19', '2');
INSERT INTO `students` VALUES ('5', 'lucy', '19', '1');

 

模型

 

示例

配置及测试一对多:根据班级查学生

班级实体类:加学生集合属性,private List<Students> students

package com.qzcsbj.bean;


import java.util.List;

public class Classes {

  private long cId;
  private String cName;
  // 学生集合
  private List<Students> students;

  public long getCId() {
    return cId;
  }

  public void setCId(long cId) {
    this.cId = cId;
  }

  public String getCName() {
    return cName;
  }

  public void setCName(String cName) {
    this.cName = cName;
  }

  public List<Students> getStudents() {
    return students;
  }

  public void setStudents(List<Students> students) {
    this.students = students;
  }

  @Override
  public String toString() {
    return "Classes{" +
            "cId=" + cId +
            ", cName='" + cName + '\'' +
            '}';
  }
}

 

学生实体类

package com.qzcsbj.bean;


public class Students {

  private long sId;
  private String sName;
  private long sAge;
  private long classId;


  public long getSId() {
    return sId;
  }

  public void setSId(long sId) {
    this.sId = sId;
  }


  public String getSName() {
    return sName;
  }

  public void setSName(String sName) {
    this.sName = sName;
  }


  public long getSAge() {
    return sAge;
  }

  public void setSAge(long sAge) {
    this.sAge = sAge;
  }


  public long getClassId() {
    return classId;
  }

  public void setClassId(long classId) {
    this.classId = classId;
  }

  @Override
  public String toString() {
    return "Students{" +
            "sId=" + sId +
            ", sName='" + sName + '\'' +
            ", sAge=" + sAge +
            ", classId=" + classId +
            '}';
  }
}

  

mapper接口

package com.qzcsbj.mapper;

import com.qzcsbj.bean.Classes;

import java.util.List;

/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
public interface ClassesMapper {
    // 1对n:根据班级id查询班级信息,包含班级下的学生信息
    public Classes getClassesById(int cId);
}

  

映射文件:ClassesMapper.xml

    <!--班级下有学生集合-->
    <resultMap id="classesMap2" type="Classes">
        <id column="c_id" property="cId"/>
        <result column="c_name" property="cName"/>
        <!--集合-->
        <collection property="students" ofType="Students">
            <id column="s_id" property="sId"/>
            <result column="s_name" property="sName"/>
            <result column="s_age" property="sAge"/>
            <result column="class_id" property="classId"/>
        </collection>
    </resultMap>

    <!--根据班级id查询班级信息,包含班级下的学生信息-->
    <select id="getClassesById" resultMap="classesMap2">
        select * from classes c join students s on c.c_id = s.class_id
        where c.c_id=#{cId}
    </select>

  

测试类

    @Test
    public void testGetClassesById(){
        Classes c = classesMapper.getClassesById(1);
        System.out.println("班级信息:" + c);
        System.out.println("班级下的学生信息:");
        List<Students> students = c.getStudents();
        for (Students student : students) {
            System.out.println(student);
        }
    }

  

结果

 

 

配置及测试多对一:根据学生查班级

学生实体类:加班级对象属性,private Classes classes;

package com.qzcsbj.bean;


public class Students {

  private long sId;
  private String sName;
  private long sAge;
  private long classId;
  private Classes classes;


  public long getSId() {
    return sId;
  }

  public void setSId(long sId) {
    this.sId = sId;
  }


  public String getSName() {
    return sName;
  }

  public void setSName(String sName) {
    this.sName = sName;
  }


  public long getSAge() {
    return sAge;
  }

  public void setSAge(long sAge) {
    this.sAge = sAge;
  }


  public long getClassId() {
    return classId;
  }

  public void setClassId(long classId) {
    this.classId = classId;
  }

  public Classes getClasses() {
    return classes;
  }

  public void setClasses(Classes classes) {
    this.classes = classes;
  }

  @Override
  public String toString() {
    return "Students{" +
            "sId=" + sId +
            ", sName='" + sName + '\'' +
            ", sAge=" + sAge +
            ", classId=" + classId +
            '}';
  }
}

  

班级实体类

package com.qzcsbj.bean;


import java.util.List;

public class Classes {

  private long cId;
  private String cName;
  private List<Students> students;

  public long getCId() {
    return cId;
  }

  public void setCId(long cId) {
    this.cId = cId;
  }

  public String getCName() {
    return cName;
  }

  public void setCName(String cName) {
    this.cName = cName;
  }

  public List<Students> getStudents() {
    return students;
  }

  public void setStudents(List<Students> students) {
    this.students = students;
  }

  @Override
  public String toString() {
    return "Classes{" +
            "cId=" + cId +
            ", cName='" + cName + '\'' +
            '}';
  }
}

 

mapper接口

package com.qzcsbj.mapper;

import com.qzcsbj.bean.Students;

/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
public interface StudentsMapper {
    // 根据学生id查学生信息,包含该学生的班级信息
    public Students getStudentsById(int sId);
}

  

映射文件:StudentsMapper.xml

<?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.qzcsbj.mapper.StudentsMapper">

    <select id="getStudentsById" resultMap="StudentMap">
        select * from students s join classes c on c.c_id=s.class_id
        where s.s_id=#{sId}
    </select>

    <resultMap id="StudentMap" type="Students">
        <id column="s_id" property="sId"/>
        <result column="s_name" property="sName"/>
        <result column="s_age" property="sAge"/>
        <result column="class_id" property="classId"/>
        <!--一个用association-->
        <association property="classes" javaType="Classes">
            <id column="c_id" property="cId"/>
            <result column="c_name" property="cName"/>
        </association>
    </resultMap>
</mapper>

  

测试类

    @Test
    public void testGetStudentsById(){
        Students stu = studentsMapper.getStudentsById(1);
        System.out.println("学生的信息是:" + stu);
        Classes c = stu.getClasses();
        System.out.println("该学生的班级信息是:" + c);
    }

  

结果

 

【bak】

 

原文会持续更新,原文地址:https://www.cnblogs.com/uncleyong/p/17009234.html

 

posted @ 2022-12-28 21:28  全栈测试笔记  阅读(145)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end