框架---MyBatis---多表

一对一

一个学生只属于一个班级。

MyBatis中使用association标签解决一对一关联查询,association标签可以使用的属性如下:
property:对象属性的名称
javaType:对象以昂属性的类型
column:数据库中字段的名称(也可能是起的别名)

最终返回的是一个学生的集合,但是Student里面是有一个banji对象,里面保存了这个学生对应的班级信息。

<mapper namespace="student">
	<resultMap id="studentMap" type="Student">
		<id column="id" property="id"/>
		<result column="name" property="name"/>
		<result column="age" property="age"/>
		<result column="gender" property="gender"/>
		<association property="aClass" javaType="Class">
			<id property="id" column="classId"/>
			<result property="name" column="className"/>
		</association>
	</resultMap>
<select id="selectStudentClassInfo" resultMap="studentMap">
		SELECT s.id, s.`name`, s.gender, c.id, c.`name` AS className
			FROM student AS s INNER JOIN class AS c
				ON s.class_id = c.id
	</select>
public void testStudentClassInfo(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        List<Student> list = sqlSession.selectList("student.selectStudentClassInfo");
        for (Student student : list) {
            System.out.println(student);
        }
    }

一对多

MyBatis中使用collection标签解决一对多关联查询,collection标签可以使用的属性如下:
property:对象属性的名称
javaType:对象以昂属性的类型
column:数据库中字段的名称(也可能是起的别名)

一个班级下有多个学生,返回的数据List< Class>里面还包含着List< Student>,所以要在班级Class类里定义List类型的Student属性,也需要一个配置文件ClassMapping.xml。
请添加图片描述
请添加图片描述
classMapping.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="aClass">
	<resultMap id="classMap" type="Class">
		<id column="id" property="id"/>
		<result column="name" property="name"/>

		<collection property="list" ofType="Student">
			<id column="studentId" property="id"/>
			<result column="studentName" property="name"/>
			<result column="age" property="age"/>
			<result column="gender" property="gender"/>
		</collection>
	</resultMap>

	<select id="selectClassStudentInfo" resultMap="classMap">
		SELECT c.id, c.name, s.id AS studentId, s.name AS studentName
		FROM class AS c INNER JOIN student AS s
								   ON s.class_id = c.id;
	</select>

</mapper>
  

Class.java

public class Class {
    private Integer id;
    private String name;

    private List<Student> list;
。。。。。。
@Test
    public void testClassStudentInfo(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        List<Class> list = sqlSession.selectList("aClass.selectClassStudentInfo");
        for (Class aClass : list) {
            System.out.println(aClass);
            List<Student> list1 = aClass.getList();
            for (Student student : list1) {
                System.out.println(student);
            }
        }
    }

多对多

多对多其实就是分解为两个一对多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值