Mybatis一对多标签Collection的使用和接收多参数的用法

CurriculumDao.xml 部分如下:
<resultMap
   type="cn.longrace.wisdom.modules.dataBase.entity.CurriculumEntity"
   id="curriculumMap">
   <result property="id" column="id" />
   <result property="code" column="code" />
   <result property="name" column="name" />
   <result property="teacherName" column="teacherName" />
   <result property="teacherId" column="teacher_id" />
   <result property="outline" column="outline" />
   <result property="createTime" column="create_time" />
   <result property="creator" column="creator" />
   <result property="img" column="img" />
   <result property="demand" column="demand" />
   <result property="plan" column="plan" />
   <result property="period" column="period" />
   <result property="imgId" column="img_id" />
   <result property="imgName" column="img_name" />
   <collection property="classes" column="{curriculumId = curriculumId, teacherId = teacherId}"
            select="cn.longrace.wisdom.modules.dataBase.dao.CurriculumClassDao.getClassesById" />
</resultMap>

1. collection中的property对应实体类CurriculumEntity的属性

private List<ClassEntity> classes;

2. column用于接收参数

    2.1. 接收一个参数,示例:collection标签中的column="id"

    2.2. 接收多参数,示例:collection标签中的 column="{curriculumId = curriculumId, teacherId = teacherId}"

    CurriculumDao.xml 中方法示例:

<select id="selectListByParams" parameterType="map"
   resultMap="curriculumMap">
   select
      cu.*, cu.id as curriculumId,
      t.`name` as teacherName, t.id as teacherId
   from lr_database_curriculum cu
      left join lr_database_curriculum_class dcc on dcc.curriculum_id = cu.id
      left join lr_database_teacher t on dcc.teacher_id = t.id
   <where>
      <if test="key != '' and key != null">
         cu.name like concat('%',#{key},'%')
      </if>
      <if test="userId != '' and userId != null">
         and t.id = #{userId}
      </if>
      <if test="curriculumId != '' and curriculumId != null">
         and cu.id = #{curriculumId}
      </if>
   </where>
   group by cu.id
</select> 
上述红色部分相对应,绿色部分对应collection标签中select属性中CurriculumClassDao中getClassesById方法的参数,如下:
<select id="getClassesById"      resultMap="cn.longrace.wisdom.modules.dataBase.dao.ClassDao.classMap"    parameterType="cn.longrace.wisdom.modules.dataBase.entity.CurriculumClassEntity">
   select
   cl.* , count(lds.id) as studentNums, cc.teacher_id as teacherId
   from lr_database_class cl
   left join lr_database_curriculum_class cc on cl.id = cc.class_id
   left join lr_database_student lds on lds.class_id = cl.id
   where cc.curriculum_id = #{curriculumId}
   <if test="teacherId != null">
      and cc.teacher_id = #{teacherId}
   </if>
   group by cl.id
</select> 

版权声明:本文为lhp_36kr原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。