web项目:业务接口开发

148 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情

本文主要目的是对业务接口的开发做一个梳理,算是偏开发经验的分享。小编认为,业务接口的开发大致可分成四步,具体文中细讲。

首先了解几个概念:

  • po 持久化对象,与持久层的数据结构形成一一对应的关系,简单来说就是一张表就好比一个po对象,表中的字段对应于po中的属性。
  • dto 数据传输对象,说白了就是前端需要的那些字段,这些字段可能来自于多张表,也可能是一张表再新增几个字段。

首先,我们需要数据表对应的po、mapper。

当我们数据库表准备好之后,我们可以使用mybatis-plus中的代码生成器来生成数据模型po、mapper、mapper.xml,甚至是service和controller(一般情况我们不生成这两个)。

第二,我们根据前端要求,先把空的接口写出来

需要了解:要发什么样的请求,地址是什么,要返回的数据是什么。大多情况下,根据前端要求,我们都是需要专门定义一个dto对象来做json返回的。如下,就这样写好先放着就行。

@ApiOperation("根据课程id查询课程基础信息")
@GetMapping("/course/{courseId}")
public CourseBaseInfoDto getCourseBaseById(@PathVariable Long courseId){
    return null;
}

第三,根据实际需要对dao层进行开发,就是在sql语句那部分的内容了。

根据需求设计好sql语句,在mapper接口中写好方法并与mapper.xml进行映射。

第四,设计service业务代码,service这块是复杂的。

不像mapper只是专注于做好sql的设计与类型的映射,service要处理的是业务的逻辑。这部分需要先定义service接口和service的实现类,在实现类中做业务逻辑的处理。例子如下,这个例子是根据课程名字、发布状态、审核状态对课程做一个模糊查询,并返回结果。

@Slf4j
@Service
public class CourseBaseInfoServiceImpl implements CourseBaseInfoService {

    @Autowired
    CourseBaseMapper courseBaseMapper;
    @Override
    public PageResult<CourseBase> queryCourseBaseList(PageParams params, QueryCourseParamsDto queryCourseParamsDto) {

        LambdaQueryWrapper<CourseBase> queryWrapper = new LambdaQueryWrapper<>();

        //拼接查询条件
        //根据课程名称模糊查询  name like '%名称%'
        queryWrapper.like(StringUtils.isNotEmpty(queryCourseParamsDto.getCourseName()),CourseBase::getName,queryCourseParamsDto.getCourseName());

        //根据课程审核状态
        queryWrapper.eq(StringUtils.isNotEmpty(queryCourseParamsDto.getAuditStatus()),CourseBase::getAuditStatus,queryCourseParamsDto.getAuditStatus());

        //根据课程发布状态
        queryWrapper.eq(StringUtils.isNotEmpty(queryCourseParamsDto.getPublishStatus()),CourseBase::getAuditStatus,queryCourseParamsDto.getPublishStatus());
        //分页参数
        Page<CourseBase> page = new Page<>(params.getPageNo(), params.getPageSize());
        //分页查询E page 分页参数, @Param("ew") Wrapper<T> queryWrapper 查询条件
        Page<CourseBase> pageResult = courseBaseMapper.selectPage(page, queryWrapper);
        //数据
        List<CourseBase> items = pageResult.getRecords();
        //总记录数
        long total = pageResult.getTotal();

        //准备返回数据 List<T> items, long counts, long page, long pageSize
        PageResult<CourseBase> courseBasePageResult = new PageResult<>(items, total, params.getPageNo(), params.getPageSize());

        return courseBasePageResult;
    }
}

最后就是完善接口与测试接口。

前面我们是将接口先空了出来,现在service写好了就可以直接去调用了,如果有一些其他逻辑当然也可以加进去。
最后提醒一点:在api接口中一般会校验参数,在service中会校验业务逻辑。