java后端开发项目流程_Java项目——后端笔记

正文

最近接触了Java项目,我负责的是(教师授课),因为刚刚接触,所以有很多东西需要去学习和了解,所以今后会经常写写收获或者记录一下项目历程!

接手第一个后端任务就是写一个接口(根据课程id和学年学期查询教师信息),以供别的界面使用,对于代码还不熟,也有些看不懂的我来说让我改这个接口其实还是有难度的!刚开始有些不知所措,后来女神告诉我“就看一条线,抓住它不放”——通过理解一条线来大概了解整个结构!下面就来简单说说改这个接口的过程中得到的收获,以及说说解析个别类!

流程图

项目采用前后端分离的方式进行开发,前端用的angular,后端是Dubbo + ZK + Spring,前端与后端连接是通过angular的后台ts用url来指定调用的后端接口,下面的图是我改接口时整理出来的一条线的大概流程!下边我也会简单解析一两个类!

【注意】:不一定ServiceImpl要直接走Dao层,比如有些复杂的接口需要用到基础服务,那么就可以在ServiceImpl中直接调用基础服务的Facade层。因为后端用的mybatis,所以当需要自己写SQL时就在Mapper.mxl中写。

b99f1b58b2f34153fe49af6d73740fab.png

Controller

1.代码

/** *根据课程id和学年学期查询当前学年学期教师信息 *@paramcourseId课程id *@paramschoolYear学年学期 *@paramstrLike模糊条件 *@return教师信息 */

//RequestMapping为url映射路径

@RequestMapping(value={"/queryTeacherInfo/{courseId}/{schoolYear}"},method=RequestMethod.GET)

//@ResponseBody 将该方法的返回结果直接写入HTTP响应正文中一般在异步获取数据时使用

@ResponseBody

public ItooResult queryTeacherInfo(@PathVariable String courseId,@PathVariable String schoolYear,@RequestParam(defaultValue = "",required = false) String strLike){

List listTeacherCourse;

try{

//判空

if(!StringUtils.isEmpty(courseId) && !StringUtils.isEmpty(schoolYear)){

//注入Facade层

listTeacherCourse=teacherCourseFacade.queryTeacherInfo(courseId,schoolYear,strLike);

}else{

return ItooResult.build("1111","请先选中一条记录");

}

}catch(Exception e){

logger.error("TeacherCourseController.queryTeacherInfo()方法出错",e);

return ItooResult.build("1111","查询失败",e);

}

return ItooResult.build("0000","查询成功,但是该条件下查询的是null值",listTeacherCourse);

}

2.小补充

(1).@RequestMapping

为url映射路径,也就是通过它来指定控制器可以处理哪些URL请求,类似于struts的action请求。可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

(2).@Responsebody和@RequestBody

◆【@Responsebody】

将方法的返回结果直接写入HTTP响应正文中,一般在异步获取数据时使用。

在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。

◆【@RequestBody】

将HTTP请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。

(3).@PathVariable和@RequestParam

两者的作用都是将request里的参数的值绑定到contorl里的方法参数里的,区别在于,URL写法不同。

◆【@PathVariable】

绑定URI模板变量值,用于将请求URL中的模板变量映射到功能处理方法的参数上。即取出uri模板中的变量作为参数

@PathVariable url——http://host:port/path/参数值

//例子

@PathVariable String courseId

◆【@RequestParam】

@RequestParam url——http://host:port/path?参数名=参数值

【value】:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;

【required】:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;

【defaultValue】:默认值,表示如果请求中没有同名参数时的默认值

//例子

@RequestParam(defaultValue = "",required = false) String strLike

(4).StringUtils . isEmpty ()

StringUtils . isEmpty () 方法是用来判断输入的String参数是否为空的。StringUtils类是org.apache.commons.lang下的类,它的的操作对象是java.lang.String类,是JDK对String类的补充,做到了对null值得控制,即输入的String参数为null时不会抛出nullPointException异常。

ServiceImpl

1.代码

/** * 根据课程id和学年学期查询教师信息 *@param courseId 课程id *@param schoolYear 学年学期code *@param strLike 模糊条件 *@return */

@Override

public List queryTeacherInfo(String courseId, String schoolYear, String strLike){

List staffForTeachModels = new ArrayList<>();

//根据课程id和学年学期查询教师Id和教师姓名(ps:因为要想查到教师具体信息得去专门存储教师信息的表中查,而且课程id此时和教师id在一张表中,所以就先走一条此线)

List teacherCourseModels = teacherCourseDao.queryTeacherIdAndName(courseId, schoolYear,strLike);

if(!CollectionUtils.isEmpty(teacherCourseModels)){

//使用Java8新特性stream流得到id集合

List teacherIds = teacherCourseModels.stream().map(TeacherCourseModel::getTeacherId).collect(Collectors.toList());

//调用基础服务,根据教师ids和模糊条件查询教师详细信息

staffForTeachModels = teachStaffFacade.queryStaffByStaffIds(teacherIds);

}

return staffForTeachModels;

}

2.小补充

(1).Stream流

Stream流是java8的新特性,也查过一些资料但是还是不能很好的理解,可能是我用的还太少,需要更多的到实践中去理解吧!下面我就简单解释一下这次我用到此stream流的代码。

.stream()——创建流

.map(TeacherCourseModel::getTeacherId)——用map转换

.collect(Collectors.toList())——把流收集为List

idea提交代码

我们用的是SVN来对代码版本进行控制,所以在配置环境时就应该把idea和SVN进行关联,今天我就不说如何和SVN关联了,下面我就说一下提交代码时咋提交吧,刚开始的时候找不到。

1.点击idea左下角的“Version Control”

2.在出现的窗口中右击你要提交的部分

3.选择Commit

0fb3e44df49631c51655a0bdeb4ac3b0.png

4.写提交信息,并对比一下改前的版本和改后的版本,以确保提交版本的正确性

5.点击右下角的“commit”按钮

89b29cc0dac2da2a0102e6fda389bec5.png

小结

本篇博客的分享就到此结束了,也没有分享太多,因为有些知识我还消化的不太好,所以就不在此献丑了,不过小菜不会放弃的,我会继续努力,更新更多我学到的知识!


版权声明:本文为weixin_36350581原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。