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

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

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


1268169-20200714144200781-1396751864.jpg


现在想要探索前后端如何交互,得后端返回出数据才行,既然如此,那就先来撸一个返回用户信息。


然后就可以判断前端传来的用户名和密码是不是存在,存在的话就可以登录(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<User, Integer>,参数分别是实体类,和这个实体类id的类型


package com.mock.platform.dao;
import com.mock.platform.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
/**
 * UserDAO类继承JpaRepository,就提供了CRUD和分页 的各种常见功能。
 * JpaRepository<User, Integer>,参数分别是实体类,和这个实体类id的类型。
 */
public interface UserDAO extends JpaRepository<User, Integer> {
}


三、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 List<User> userList() {
        //  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 List<User> userList() 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条用户信息:


1268169-20200714144529260-1406910908.png

六、验证


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


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


1268169-20200714144549399-243448144.png


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

相关文章
|
11天前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
37 4
|
3天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
22 3
|
18天前
|
存储 前端开发 Java
深入理解后端开发:从基础到高级
本文将带你走进后端开发的神秘世界,从基础概念到高级应用,一步步揭示后端开发的全貌。我们将通过代码示例,让你更好地理解和掌握后端开发的核心技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
17天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
15天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
31 1
|
17天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
34 1
|
17天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
20天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
20天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
24天前
|
消息中间件 API 持续交付
后端开发中的微服务架构实践####
【10月更文挑战第21天】 本文深入探讨了微服务架构在后端开发中的应用,从基本概念出发,详细阐述了微服务的核心优势、设计原则及关键技术。通过实际案例分析,揭示了微服务如何助力企业应对复杂业务需求,提升系统的可扩展性、灵活性与可靠性。同时,也指出了实施微服务过程中可能面临的挑战,并提供了相应的解决方案和最佳实践。 ####
28 3

热门文章

最新文章

下一篇
DataWorks