开启掘金成长之旅!这是我参与「掘金日新计划 · 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中会校验业务逻辑。