JAVA新手如何快速的在Springboot框架中开发一个查询接口
经过了一个多月的熟悉环境和看项目之后,终于开始写代码啦~ 还有点小激动
本次分配的接口比较简单,大体需求为:根据一个人的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代码
<select id="findFinishNum" parameterType="java.util.Map" resultType="java.lang.Integer">
<![CDATA[ SELECT count(*) FROM ]]>
class_student A
LEFT JOIN
classinfo C
ON A.class_id = C.class_id
<if test=" user_Id != null and user_Id != '' ">
<![CDATA[where A.user_id = #{user_Id} ]]>
</if>
</if>
And A.structure_id = #{structure_Id}
And C.status = #{status}
And ifnull(A.isDel, 0) = 0
And ifnull(A.certificate_num, 0) != 0
</select>
到这里接口就算是开发完了,虽然看起来挺简单,但是还是改了好长时间,遇到了不少问题~
遇到的问题
1.Dto传参数 数据类型不对导致参数传不进去。注意参数数据类型!!
2.参数名称对不上导致参数传不进去:userId--->user_Id。注意名称要对应!!