JAVA新手如何快速的在Springboot框架中开发一个查询接口

320 阅读3分钟

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。注意名称要对应!!

欢迎各位小伙伴相互交流~~