前端传带有数组json对象,后端java接收方法及Mybatis一对多查询返回对象带List集合的Mapper语句

添加场景

开发中,前端传参经常会有一对多的情况,比如要添加一个课程,这个课程里面包含多个目录,每个目录里面包含多个课件,这时候前端传的json对象中就会包含数组对象,那后端该如何去接收呢?做法很简单,下面进行代码演示

前端传参json数据:

{
    "courseId": "1",
    "courseName": "鸡",
    "catalogList": [
        {
            "catalogId": "1",
            "catalogName": "泥",
            "coursewareList": [
                {
                    "coursewareId": "1",
                    "coursewareName": "态"
                },
                {
                    "coursewareId": "2",
                    "coursewareName": "美"
                }
            ]
        }
    ]
}

后端代码:

@RestController
@RequestMapping("/course")
public class CourseController {
    @PostMapping("/insert")
    public Result<CourseDTO> validParam(@RequestBody CourseDTO dto) {
        return Result.ok(dto);
    }
}
@Data
public class CourseDTO {
    private String courseId;
    private String courseName;
    private List<CatalogDTO> catalogList;
}
@Data
public class CatalogDTO {
    private String catalogId;
    private String catalogName;
    private List<CoursewareDTO> coursewareList;
}
@Data
public class CoursewareDTO {
    private String coursewareId;
    private String coursewareName;
}

请求后数据就会自动封装到CourseDTO 对象进去,对应的子集也会封装到list集合中去

查询场景

同样的,查询时根据课程id查询课程及对应的目录和课件信息,然后以相同的数据格式返回给前端,这里为了方便都是用DTO对象去传输,对应的mapper编写

<?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="com.example.demo.dao.CourseDAO">
    <resultMap id="CourseMap" type="com.example.demo.dto.CourseDTO">
        <result property="courseId" column="course_id"/>
        <result property="courseName" column="course_name"/>
        <collection property="catalogList" ofType="com.example.demo.dto.CatalogDTO"
                    select="getCatalogList" column="course_id"></collection>
    </resultMap>
    <resultMap id="CatalogMap" type="com.example.demo.dto.CatalogDTO">
        <result property="catalogId" column="catalog_id"/>
        <result property="catalogName" column="catalog_name"/>
        <collection property="coursewareList" ofType="com.example.demo.dto.CoursewareDTO"
                    select="getCoursewareList" column="catalog_id"></collection>
    </resultMap>

    <resultMap id="CoursewareMap" type="com.example.demo.dto.CoursewareDTO">
        <result property="coursewareId" column="courseware_id"/>
        <result property="coursewareName" column="courseware_name"/>
    </resultMap>

    <!-- 查询课程 -->
    <select id="getCourse" resultMap="CourseMap">
        SELECT
            course_id,
            course_name
        FROM
            course
        WHERE
            course_id = #{courseId}
    </select>

    <!-- 查询目录 -->
    <select id="getCatalogList" resultMap="CatalogMap">
        SELECt
            catalog_id,
            catalog_name
        FROM
            catalog
        WHERE
            course_id = #{courseId}
    </select>

    <!-- 查询课件 -->
    <select id="getCoursewareList" resultMap="CoursewareMap">
        SELECt
            courseware_id,
            courseware_name
        FROM
            courseware
        WHERE
            catalog_id = #{catalogId}
    </select>
</mapper>

查询结果:

{
    "code": 0,
    "message": "操作成功",
    "data": {
        "courseId": "1",
        "courseName": "鸡",
        "catalogList": [
            {
                "catalogId": "1",
                "catalogName": "泥",
                "coursewareList": [
                    {
                        "coursewareId": "1",
                        "coursewareName": "唱"
                    },
                    {
                        "coursewareId": "2",
                        "coursewareName": "跳"
                    }
                ]
            }
        ]
    }
}

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