ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【平台开发】— 5.后端:代码分层

2021-04-23 18:05:00  阅读:215  来源: 互联网

标签:后端 代码 public platform 分层 org import com id


数据库准备完事儿,现在可以撸后端代码了。

现在想要探索前后端如何交互,得后端返回出数据才行,既然如此,那就先来撸一个返回用户信息。
然后就可以判断前端传来的用户名和密码是不是存在,存在的话就可以登录(PS:这里仅仅以学习目的,并不是说真正的登录是这么实现)。

首先,熟悉下后端代码的分层。

一、pojo

实体层,用来写实体类,比如用户User,它有很多个属性,比如idusername等等,与上篇设计的数据库表字段对应。
注意@Data这个注解,可以不用写set()get()tostring()方法了,省去了不少功夫,而且代码也更简洁。
记得添加依赖,和在idea里安装lombok插件。

package com.mock.platform.pojo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "user")
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
@Data
public class User {
    @Id //声明一个字段“id”为数据库表的主键
    @GeneratedValue(strategy = GenerationType.AUTO) //标注主键的生成策略,通过strategy 属性指定
    @Column(name = "id") //被标注字段在数据库表中所对应字段的名称
    private int id; //用户id
    private String username; //用户名称
    private String password; //密码
    private Date createTime; //创建时间

//    public int getId() {
//        return id;
//    }
//    public void setId(int id) {
//        this.id = id;
//    }
//    public String getUsername() {
//        return username;
//    }
//    public void setUsername(String username) {
//        this.username = username;

二、dao

DAO层,全称Data Access Object,负责与数据库打交道。

这个包下面则是用来写dao文件,UserDAO类继承JpaRepository,就提供了CRUD和分页 的各种常见功能。
JpaRepository,参数分别是实体类,和这个实体类id的类型

package com.mock.platform.dao;

import com.mock.platform.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * UserDAO类继承JpaRepository,就提供了CRUD和分页 的各种常见功能。
 * JpaRepository,参数分别是实体类,和这个实体类id的类型。
 */
public interface UserDAO extends JpaRepository{

}

三、service

业务逻辑层,主要的业务逻辑就是在这里实现了,所以说基本业务需求都更改这个层。

比如我实现一个方法用来查询用户信息。

package com.mock.platform.service;

import com.mock.platform.dao.UserDAO;
import com.mock.platform.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;

@Service //标记这是一个service类
public class UserService {
    @Autowired //自动装配UserDAO对象
    UserDAO userDAO;

    public ListuserList() {
        //  Sort 对象,表示通过 id 倒排序
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        // 通过 categoryDAO进行查询
        return userDAO.findAll(sort);
    }
}

四、controller

这层通常用来控制业务逻辑,但是具体的业务逻辑并不在这里实现,而是通过调用service层里的方法。

比如我这里就是接收到前端的请求后,返回用户信息。

package com.mock.platform.controller;

import com.mock.platform.pojo.User;
import com.mock.platform.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController //标记这是控制器,下面每个方法的返回值都会直接转换成json数据格式
public class UserController {
    @Autowired //自动装配 CategoryService
    UserService userService;

    @GetMapping("/users") //当访问users,会获取所有的User对象集合,并返回。RestController会自动转成json给浏览器
    public ListuserList() throws Exception {
        return userService.userList();
    }
}

五、properties

上面基本把逻辑都写好了,现在还要在properties里配置好数据源,这样整个服务才可以使用。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/my_platform?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto = none

#上下文地址为 my_platform
server.servlet.context-path=/my_platform

#jpa对实体类的默认字段会把驼峰命名的属性,转换为字段名的时候自动加上下划线。 这个配置的作用就是去掉下划线
#比如属性名称是 createDate, jpa 默认转换为字段名 create_Date。 有了这个配置之后,就会转换为同名字段 createDate
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

#显示 hibernate 执行的sql语句。 这个在上线之后,应该是关掉的,因为大量的 控制台输出会严重影响系统性能,现在调试用
spring.jpa.show-sql=true

为了方便,我先在数据库插入了3条用户信息:

六、验证

到了验证的时候了,先启动后端服务。

接下来,我用postman去请求controller里暴露出来的接口,看看是不是正确的返回数据。

数据正确返回,按照id的倒序。

标签:后端,代码,public,platform,分层,org,import,com,id
来源: https://blog.51cto.com/u_13407532/2727569

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有