【平台开发】— 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的倒序。

相关文章
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
784 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
人工智能 Java API
后端开发必看:零代码实现存量服务改造成MCP服务
本文介绍如何通过 **Nacos** 和 **Higress** 实现存量 Spring Boot 服务的零代码改造,使其支持 MCP 协议,供 AI Agent 调用。全程无需修改业务代码,仅通过配置完成服务注册、协议转换与工具映射,显著降低改造成本,提升服务的可集成性与智能化能力。
3317 1
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
616 41
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
770 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
前端开发 Java 数据库连接
后端开发中的错误处理实践:原则与实战
在后端开发中,错误处理是保障系统稳定性的关键。本文介绍了错误分类、响应设计、统一处理机制及日志追踪等实践方法,帮助开发者提升系统的可维护性与排障效率,做到防患于未然。
|
前端开发 JavaScript 关系型数据库
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
975 5
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
|
人工智能 缓存 Java
用 AI 搭建秒杀平台后端,一周搞定所有功能(附超详细踩坑记录)
本文分享如何借助AI技术快速搭建电商秒杀平台后端。通过飞算JavaAI,从需求分析到代码生成全流程智能化,大幅提高开发效率。文章详细记录了技术栈选择(Java、Spring Boot、MySQL、Redis)、系统架构设计、缓存机制优化、数据一致性保障及测试调优等环节,解决高并发难题,助开发者高效完成秒杀平台构建并规避常见坑点。
|
人工智能 小程序 NoSQL
【一步步开发AI运动小程序】二十一、如何将AI运动项目配置持久化到后端?
本文介绍基于云智「Ai运动识别引擎」的运动配置持久化方案,旨在优化小程序或Uni APP中AI运动识别能力。通过将运动检测参数(如`Key`、`Name`、`TickMode`、`rules`或`samples`)持久化到后端,可避免因频繁调整运动参数而重新发布应用,提升用户体验。持久化数据结构支持规则和姿态样本存储,适用于关系数据库、文件或文档数据库(如MongoDB)。此外,云智还提供运动自动适配工具及「AI乐运动」产品,助力快速实现AI体育、全民健身等场景。
|
SQL JSON 关系型数据库
17.6K star!后端接口零代码的神器来了,腾讯开源的ORM库太强了!
"🏆 实时零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端定制返回 JSON 的数据和结构"
344 1
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
881 2

热门文章

最新文章