今天已经是入职的第49天啦。经过了一个多月的熟悉环境和看项目之后,终于开始写代码啦~ 还有点小激动
本次分配的接口比较简单,大体需求为:根据一个人的user_id,关联课程表和课程学生表这两张表,查询出该user_id满足课程状态为已完成、课程体系代码为xxx、已发证书的数据项总数。如果查询出的数据条数>=1,就返回已完成,否则返回未完成。
SQL语句逻辑还是很简单的,只需要按照class_id关联表并且按一定条件查询就可~
select count(1)
from
class_student a
left join
classinfo b
on a.class_id = b.class_id
where
a.isDel != '1' and b.structure_id = ?1 and a.user_id=?2 and b.status =?3 and a.certificate_num is not null;
底层的逻辑很清晰,但是对我这种新手来说,怎样能写出一套完整的代码实现一个接口才是难点 QAQ
本项目使用的语言是JAVA,框架是SSM框架。(都不怎么会……)
问题不大,这种困难怎么能难得住我呢!
不会自己写,还不会照葫芦画瓢吗。项目里可是有大量的接口供我模仿。于是,在动手写代码之前,我花了几天的时间看现成的接口,理解它是怎么在各个层之间联系,从而实现功能的。
经过几天的学习,我也大概知道了springboot是怎样实现一个接口
话不多说,开干!
首先在 xxxxController.java文件里写业务逻辑
/**
* 入参:userId
* status 班级状态
* structureId 体系id
* 出参:resultCod //查询是否成功,0-查询不成功,1-查询成功
* resultData //完成结果,0--没有已完成,结训,发放证书的课程, 1--存在1门及以上已完成,结训,发证书的课程
* @param request
* @return
*/
@SuppressWarnings({"unchecked", "unused"})
@RequestMapping("/findStudentIsFinish")
public Result findStudentIsFinish(HttpServletRequest request) {
Result result = new Result();
try {
Dto paramDto = WebUtils.getParamAsDto(request);//解析http传进来的json文件
//将json文件中的参数获取出来
//感觉有点多余了……,可能方便参数校验
String userId = (String) paramDto.get("userId");
Integer status = (Integer) paramDto.get("status");
Integer structureId = (Integer) paramDto.get("structureId");
LOG.debug("userId = "+ userId);
LOG.debug("status = "+ status);
LOG.debug("structureId = "+ structureId);
//参数校验
if (xxxxxUtils.isEmpty(userId)||xxxxxUtils.isEmpty(status)||xxxxxUtils.isEmpty(structureId)) {
return Result.getParamNullResult();
}
//又把参数填回去了……
Dto finallyDto = new BaseDto();
finallyDto.put("user_id",userId);
finallyDto.put("status", status);
finallyDto.put("structure_id", structureId);
//查询满足条件的课程总数并且返回isFinish
Integer isFinish = xxxxxService.isFinish(finallyDto);
result.setResultCode(xxxxx.SUCCESS);
result.setResultMsg("查询成功!");
result.setResultData(isFinish);
}
catch (Exception e) {
//异常处理
result.setResultCode(xxxxx.FAILURE);
result.setResultMsg("查询失败,请检查!");
LOG.info("查询失败:",e);
}
return result;
}
}
之后就是在xxxxxService.java文件里声明刚刚提到的isFinish(finallyDto)方法
Integer isFinish(Dto finallyDto);
再然后就是在xxxxxServiceImpl.java文件里实现isFinish(finallyDto)方法
public Integer isFinish(Dto finallyDto) {
Integer isFinish = 0;
int classCount = classStudentDao.findFinishNum(finallyDto);
//isFinish 默认为0,若classCount>=1,return 1
logger.info("classCount:"+classCount+" <----查询出的满足条件的课程数");
if(classCount < 1) {
return isFinish;
}else{
return isFinish + 1;
}
}
}
之后在xxxxxDao.java里声明这个SQL语句的方法
int findFinishNum(Dto finallyDto);
最后就是写SQL啦
在xxxxxMapper.xml里写Mybatis代码(小声哔哔: mybatis代码的格式真够复杂的)
最后使用Postman调一下接口,调用成功~
到这里接口就算是开发完了,虽然看起来挺简单,但是还是改了好长时间,遇到了不少问题~
1.Dto传参数 数据类型不对导致参数传不进去。千万注意参数数据类型!!
2.参数名称对不上导致参数传不进去:userId—>user_Id。注意名称要对应!!细心,细心,一定要细心!
虽说接口比较简单,但是也是自己一个人完整的实现的。这次的任务也让我了解了JAVA和springboot的开发流程。过程中也遇到了一些问题,比如参数类型等问题。不过只有不断的写代码,不断的找bug才会使得我们不断进步。