mybatis级联之一对多的关系

xiaoxiao2021-02-28  51

一对多的级联

mybatis一对多的级联,这里举例班级和学生的例子,一个班级有多个学生,属于一对多的关系,一个学生只属于一个班级,属于多对一的关系。 建立数据库文件

CREATE TABLE f_class( c_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 's_id', CODE VARCHAR(20) NOT NULL COMMENT '编号', NAME VARCHAR(20) NOT NULL COMMENT '名称' ); INSERT INTO f_class(CODE,NAME) VALUES ('1401','Software Engineering'); CREATE TABLE f_student( s_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 's_id', s_NAME VARCHAR(20) NOT NULL COMMENT '名字', sex VARCHAR(20) NOT NULL COMMENT '性别', age INT NOT NULL COMMENT '年龄', class_id INT, FOREIGN KEY (class_id) REFERENCES f_class(id) ); INSERT INTO f_student (s_NAME,sex,age,class_id) VALUES ('lazy','boy',20,1); INSERT INTO f_student (s_NAME,sex,age,class_id) VALUES ('rose','girl',19,1); INSERT INTO f_student (s_NAME,sex,age,class_id) VALUES ('joh','boy',19,1); INSERT INTO f_student (s_NAME,sex,age,class_id) VALUES ('miss','girl',20,1);

建立POJO对象,都省略类 set和get方法。 Grade.java

public class Grade implements Serializable{ private Integer c_id; private String code; private String name; //班级和学生一对多的关系,一个班级可以有多个学生 private List<Student> students; }

Student.java

public class Student implements Serializable { private Integer s_id; private String s_name; private String sex; private Integer age; }

映射文件GradeMapper.xml

<mapper namespace="com.stumybatis.dao.GradeDao"> <select id="selectGradeById" parameterType="int" resultMap="gradeStudent"> SELECT * from f_class c,f_student s where c.c_id=#{c_id} and s.class_id=c.c_id </select> <resultMap id="gradeStudent" type="com.stumybatis.pojo.Grade"> <id property="c_id" column="c_id"/> <result property="code" column="code"/> <result property="name" column="name"/> <!--collection表示一对多的关系--> <collection property="students" ofType="com.stumybatis.pojo.Student" > <id property="s_id" column="s_id"/> <result property="s_name" column="s_name"/> <result property="sex" column="sex"/> <result property="age" column="age"/> </collection> </resultMap> </mapper>

GradeDao接口的内容

public interface GradeDao { public Grade selectGradeById(Integer c_id); }

测试代码

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:spring-mybatis.xml"}) public class StudentDaoTest { @Autowired private GradeDao gradeDao; @Test public void testSelecGrade2() throws Exception{ Grade grade = gradeDao.selectGradeById(1); System.out.println(grade.getC_id()+ " "+grade.getCode()+" "+grade.getName()); List<Student> list = grade.getStudents(); for(Student student:list){ System.out.println(student); } }

结果如下: 但是有一个特别好玩的就是,如果这两个地方的name不区分的话,那就会有很有意思的结果,就是所有的s_name都写成name,会出现下图的结果。把学生的name全都变成了软件工程。很神奇有没有。

这里的环境是搭建好的SSM环境测试的。

转载请注明原文地址: https://www.6miu.com/read-67229.html

最新回复(0)