Javaweb后端项目开发流程

刚刚学完Javaweb的部分,目前对前后端分离的感觉是,前端发送请求,然后将后端发过来的数据展示到页面上。后端部分的开发流程大致是:

一、Java-Bean

根据数据库的表结构,创建相对应的类实体类(pojo)对象,数据库的下划线后面的字母在类对象中要大写,且去除下划线;

二、Controller、Service、Dao接口及其实现类

1.Controller类

  从请求携带的JSON串中获取响应数据,获取响应数据时,当前的实体类可能不满足响应数据对应的类,可以单独创建一个匹配的类对象(vo)用以接收数据:

public static <T> T readJson(HttpServletRequest request, Class<T> clazz) {
        T t = null;
        BufferedReader reader;
        try {
            reader = request.getReader();
            StringBuilder buffer = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null)
                buffer.append(line);
            t = objectMapper.readValue(buffer.toString(), clazz);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return t;
    }

后端查询的数据转换成JSON串返回给前端:

public static void writeJson(HttpServletResponse response, Result result) {
        response.setContentType("application/json;charset=UTF-8");
        try {
            String json = objectMapper.writeValueAsString(result);
            response.getWriter().write(json);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

JSON串转换的代码可以封装成一个工具类,并放在utils文件夹下面;

将数据转换成JSON时需要用到result对象,该对象是封装后端数据的较为通用的类:

public class Result<T> {
    // 返回状态码
    private Integer code;
    // 返回消息
    private String message;
    // 返回数据
    private T data;

    public Result() {
    }
}

该类的两个方法(ok、build)也较为简单,build有很多重构方法,要返回的数据是成功的用ok方法,失败的则用build方法;

“成功”方法

protected static <T> Result<T> build(T data) {
        Result<T> result = new Result<>();
        if (data != null)
            result.setData(data);
        return result;
    }

public static <T> Result<T> ok(T data){
        Result<T> result=build(data);
        return build(data,ResultCodeEnum.SUCCESS);
    }

“失败”方法

protected static <T> Result<T> build(T data) {
        Result<T> result = new Result<>();
        if (data != null)
            result.setData(data);
        return result;
    }

    public static <T> Result<T> build(T body, Integer code, String message) {
        Result<T> result = build(body);
        result.setCode(code);
        result.setMessage(message);
        return result;
    }
    public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
        Result<T> result = build(body);
        result.setCode(resultCodeEnum.getCode());
        result.setMessage(resultCodeEnum.getMessage());
        return result;
    }

如果后端返回给前端的数据是失败的,一般会加上一个响应码,响应码放在一个枚举类中:

public enum ResultCodeEnum {
    SUCCESS(200, "success"),
    USERNAME_ERROR(501, "usernameError"),
    PASSWORD_ERROR(502, "passwordError"),
    NOTLOGIN(504, "notLogin"),
    USERNAME_USED(505, "usernameUsed");

    private final Integer code;
    private final String message;
}

Controller类中处理的事情可以概括为:从请求中获取数据

req.getParameter、req.getHeader、readJson

然后经过service层获取数据,根据数据的结果(失败、成功)判断,封装数据,然后返回给前端。

2.Service类

service层处理数据,如:Controller层传过来的密码可能需要加密,Dao层查询到的密码可能需要解密等,查询的数据类对象可能当前的实体类也不满足,也需要单独创建一个类用以接收Dao层查询的数据,创建完之后调用Dao层的方法查询需要的数据,然后将查询道的数据封装成刚刚创建的类,并返回

Map<String,ObLect> pageInfo =new HashMap<>();
// 分页查询本页数据
List<HeadlinePageVo> pageData =newsHeadLineDao.findPageList(headLineQueryVo);
// 分页查询满足记录的总数据量
int totalSize = newsHeadLineDao.findPageCount(headLineQueryVo);
// 页大小
int pageSize =headLineQueryVo.getPageSize();
// 总页码数
int totalPage=totalSize%pageSize == 0 ! totalSize/pageSize :
totalSize/pageSize+1;
// 当前页码数
int pageNum= headLineQueryVo.getPageNum();
pageInfo.put("pageData",pageData);
pageInfo.put("pageNum",pageNum);
pageInfo.put("pageSize",pageSize);
pageInfo.put("totalPage",totalPage);
pageInfo.put("totalSize",totalSize);
return pageInfo;

3.Dao类

Dao层几乎是编写sql语句,连接数据库,运行sql语句获取数据,然后返回;

        3.1在连接数据库之前,要先检查自己电脑安装的数据库服务是否开启了(很重要),win+r,services(我的电脑运行没反应,不知道什么原因),或者点击win图标,直接搜索服务也可;

       3.2连接数据库的代码,如果是原生的jdbc代码可以封装在BaseDao类,直接调用即可,因为Dao层几乎每个方法都会用(后面用了Mybatis就不需要了,原理还是要知道的)

        3.3Dao层最难的部分就是sql语句的编写,写的sql语句先运行下看看得到的数据是否符合要求,不然后面找bug就麻烦,目前对sql语句还不算熟练(多刷题~~)

三、其他

后端部分最核心的就是三层结构了,至于Filter过滤器、resource目录,jar包依赖也很重要;

总结:

只要有了接口文档,后端部分实现起来感觉不算特别难,如果知道了前端的逻辑,感觉接口文档也不难写了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值