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

本文详细介绍了前端如何通过JSON对象传递一对多数据结构,如课程与目录、课件的关系,并展示了后端Spring Boot接收和处理这些数据的方法,以及MyBatis中如何使用DTO进行数据库查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加场景

开发中,前端传参经常会有一对多的情况,比如要添加一个课程,这个课程里面包含多个目录,每个目录里面包含多个课件,这时候前端传的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": "跳"
                    }
                ]
            }
        ]
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值