一对多的处理
大约 2 分钟数据库技术Mybatis
一个老师拥有多个学生。对于老师而言,就是一对多的关系。
实体类修改
Student.java
/**
* @Description TODO
* @Author Administrator
* @Date 2020/11/28 13:38
*/
@Data
public class Student {
private int id;
private String name;
private int tid;
}
Teacher.java
/**
* @Description TODO
* @Author Administrator
* @Date 2020/11/28 13:39
*/
@Data
public class Teacher {
private int id;
private String name;
/**
* 一个老师拥有多个学生
*/
private List<Student> students;
}
mapper文件TeacherMapper.xml修改
按结果嵌套
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.TeacherMapper">
<!--按结果嵌套查询-->
<select id="getTeacherById" resultMap="TeacherStudent">
select t.id tid,t.name tname,s.id sid,s.name sname
from teacher t,student s
where t.id=s.tid and t.id=#{tid}
</select>
<resultMap id="TeacherStudent" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<!--javaType指定属性的类型-->
<!--集合中的泛型信息,使用ofType取-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
</mapper>
按查询嵌套
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.TeacherMapper">
<!--按查询嵌套-->
<select id="getTeacherById2" resultMap="TeacherStudent2">
select * from teacher where id = #{tid}
</select>
<resultMap id="TeacherStudent2" type="Teacher">
<result property="id" column="id"/>
<result property="name" column="name"/>
<collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
select * from student where tid = #{tid}
</select>
</mapper>
测试
/**
* 按结果嵌套
*/
@Test
public void test02(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = teacherMapper.getTeacherById(1);
System.out.println(teacher);
sqlSession.close();
}
/**
* 按查询嵌套
*/
@Test
public void test03(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = teacherMapper.getTeacherById2(1);
System.out.println(teacher);
sqlSession.close();
}
结果
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Class not found: org.jboss.vfs.VFS
JBoss 6 VFS API is not available in this environment.
Class not found: org.jboss.vfs.VirtualFile
VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
Using VFS adapter org.apache.ibatis.io.DefaultVFS
Find JAR URL: file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo
Not a JAR: file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo
Reader entry: Student.class
Reader entry: Teacher.class
Listing file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo
Find JAR URL: file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo/Student.class
Not a JAR: file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo/Student.class
Reader entry: ���� 4 U
Find JAR URL: file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo/Teacher.class
Not a JAR: file:/E:/code/Java/mybatis-study/mybatis-06/target/classes/com/kuang/pojo/Teacher.class
Reader entry: ���� 4 c
Checking to see if class com.kuang.pojo.Student matches criteria [is assignable to Object]
Checking to see if class com.kuang.pojo.Teacher matches criteria [is assignable to Object]
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 510063093.
==> Preparing: select t.id tid,t.name tname,s.id sid,s.name sname from teacher t,student s where t.id=s.tid and t.id=?
==> Parameters: 1(Integer)
<== Columns: tid, tname, sid, sname
<== Row: 1, 秦老师, 1, 小明
<== Row: 1, 秦老师, 2, 小红
<== Row: 1, 秦老师, 3, 小张
<== Row: 1, 秦老师, 4, 小李
<== Row: 1, 秦老师, 5, 小王
<== Total: 5
Teacher(id=1, name=秦老师, students=[Student(id=1, name=小明, tid=1), Student(id=2, name=小红, tid=1), Student(id=3, name=小张, tid=1), Student(id=4, name=小李, tid=1), Student(id=5, name=小王, tid=1)])
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1e66f1f5]
Returned connection 510063093 to pool.
Process finished with exit code 0
