问题遇到的现象和发生背景
求问mybatis场景题
现有A,B,C三表,A为主表,B为中间表,C为副表,A和C为1对多的关系,在实体类中,c为a的List型变量 , 现在要对A进行分页查询,求问mybatis能不能实现一条sql完成这种查询? 先查主表,再遍历数据循环查副表,这种方式是不是效率很低,有没有优化的方式?
求问mybatis场景题
现有A,B,C三表,A为主表,B为中间表,C为副表,A和C为1对多的关系,在实体类中,c为a的List型变量 , 现在要对A进行分页查询,求问mybatis能不能实现一条sql完成这种查询? 先查主表,再遍历数据循环查副表,这种方式是不是效率很低,有没有优化的方式?
可以的,你可以使用collection,关联属性
<?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">
<!-- namespace是指要处理哪一个接口类下的方法,所以必须要改为ClassDao -->
<mapper namespace="com.xx.Dao.ClassDao">
<!-- 先去数据库中执行,成功执行之后再去写resultMap -->
<select id="getClassStudent" resultMap="classStudents">
select
c.*,
stu.id sid,
stu.stu_name,
stu.stu_age,
stu.stu_class_id
from
com_class c
left join
com_student stu
on
c.id = stu.stu_class_id
where
c.id=#{id};
</select>
<!-- type是对班级类定义的封装规则,该规则的唯一标识是classStudents -->
<resultMap type="com.xx.Bean.Class" id="classStudents">
<!--
collection:定义集合元素的封装
property:指定实体类的哪一个属性是集合属性,MyBatis会将查询出来的集合封装到这里。
javaType:指定对象的类型,和ofType区分。
ofType:指定集合里面元素的类型。
-->
<id property="id" column="id"/>
<result property="className" column="class_name"/>
<result property="classNum" column="class_num"/>
<collection property="students" ofType="com.xx.Bean.Student">
<result property="id" column="sid"/>
<result property="stuName" column="stu_name"/>
<result property="stuAge" column="stu_age"/>
<result property="stuClassId" column="stu_class_id"/>
</collection>
</resultMap>
</mapper>