当前位置: 首页 > news >正文

前后端分离项目进阶1---后端

前端链接:前端解析

一.项目目录

二.关键代码分析

1)Admin.java

package improv1.improv1.entity;
public class Admin {private String account;private String password;private String name;// 构造方法、getter和setterpublic Admin() {}public Admin(String account, String password, String name) {this.account = account;this.password = password;this.name = name;}// Getters and Setterspublic String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

解析:

编写Admin实体类,其实可以不用写实体类,可以直接通过Mapper来获取数据库表的对应数据,

// Controller中直接接收Map
@PostMapping
public void addAdmin(@RequestBody Map<String, Object> adminMap) {adminMapper.insert(adminMap);
}// Mapper接口
@Insert("INSERT INTO admin VALUES(#{account}, #{password}, #{name})")
int insert(Map<String, Object> map);

但是,这样做不利于纠错,字段名拼写错误只有在运行时才会暴露,无法保证所有必要字段都存在,业务逻辑散落在各处,难以维护。对此,建议

学习阶段:建议坚持用Entity,培养良好设计习惯

正式项目:必须用Entity+DTO,减少后期维护成本

特殊需求:如果确实需要灵活性,可以用MyBatis的 @MapKey 注解:

@Select("SELECT * FROM admin")
@MapKey("account")  // 返回Map结构,key=account,value=记录Map
Map<String, Map<String, Object>> findAllAsMap();

2)AdminMapper.java

package improv1.improv1.mapper;
import improv1.improv1.entity.Admin;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface AdminMapper {@Select("SELECT * FROM admin")List<Admin> findAll();@Select("SELECT * FROM admin WHERE Account = #{account}")Admin findByAccount(String account);@Insert("INSERT INTO admin(Account, Password, Name) VALUES(#{account}, #{password}, #{name})")int insert(Admin admin);@Update("UPDATE admin SET Password = #{password}, Name = #{name} WHERE Account = #{account}")int update(Admin admin);@Delete("DELETE FROM admin WHERE Account = #{account}")int delete(String account);
}

解析:

提供五个接口,分别用来查询全部记录,查询指定账号记录和插入新数据,更新数据,删除数据。

3).AdminController.java

package improv1.improv1.controller;
import improv1.improv1.entity.Admin;
import improv1.improv1.mapper.AdminMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/api/admins")
public class AdminController {@Autowiredprivate AdminMapper adminMapper;@GetMappingpublic List<Admin> getAllAdmins() {return adminMapper.findAll();}@GetMapping("/{account}")public Admin getAdminByAccount(@PathVariable String account) {return adminMapper.findByAccount(account);}@PostMappingpublic int addAdmin(@RequestBody Admin admin) {return adminMapper.insert(admin);}@PutMapping("/{account}")public int updateAdmin(@PathVariable String account, @RequestBody Admin admin) {admin.setAccount(account);return adminMapper.update(admin);}@DeleteMapping("/{account}")public int deleteAdmin(@PathVariable String account) {return adminMapper.delete(account);}
}

解析:

@RequestBody(请求体参数)

作用:从 HTTP 请求体(body) 获取 JSON/XML 数据,并转换成 Java 对象。
适用场景:提交表单数据、创建/更新资源(如 POST 请求传 JSON 数据)。

@PathVariable(路径变量)

作用:从 URL 路径 中获取参数。
适用场景:RESTful API,比如查询、删除某个资源(如 /users/1 表示获取 ID=1 的用户)。

特性@PathVariable@RequestBody
参数来源URL 路径(如 /users/1HTTP 请求体(Body)
数据格式简单类型(数字、字符串)JSON/XML(复杂对象)
适用方法GETDELETEPOSTPUT
示例请求GET /users/1POST /users + JSON
Content-Type不需要指定需指定(如 application/json
http://www.dtcms.com/a/290888.html

相关文章:

  • 果园里的温柔之手:Deepoc具身智能如何重塑采摘机器人的“生命感知”
  • Python day20 - 特征降维之奇异值分解
  • 【设计模式C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)
  • git_guide
  • prometheus主动服务发现机制
  • 在 React 中实现全局防复制hooks
  • Java 解析前端上传 ZIP 压缩包内 Excel 文件的完整实现方案
  • Neo4j 5.x版本的导出与导入数据库
  • 易语言+懒人精灵/按键中控群控教程(手机、主板机、模拟器通用)
  • CFD总压边界条件的理解与开发处理
  • DM8数据库Docker镜像部署最佳实践
  • 自学鸿蒙测试day01-插件安装推荐
  • Vue 3 响应式原理详细解读【一】—— Proxy 如何突破 defineProperty 的局限
  • 计算机发展史:晶体管时代的技术飞跃
  • Boost库智能指针boost::shared_ptr详解和常用场景使用错误示例以及解决方法
  • 软件测试 —— A / 入门
  • 数据结构 之 【排序】(直接插入排序、希尔排序)
  • 基于 Nginx 搭建 OpenLab 多场景 Web 网站:从基础配置到 HTTPS 加密全流程
  • Nginx IP授权页面实现步骤
  • Grok网站的后端语言是php和Python2.7
  • Python 变量赋值与切片语法(in-place 修改 vs 重新赋值)
  • 《画布角色的双重灵魂:解析Canvas小游戏中动画与碰撞的共生逻辑》
  • 状压DP学习笔记[浅谈]
  • 计算机网络:概述层---计算机网络的性能指标
  • IFN影视官网入口 - 4K影视在线看网站|网页|打不开|下载
  • 算法训练营DAY37 第九章 动态规划 part05
  • Linux开发⊂嵌入式开发
  • 复制docker根目录遇到的权限问题
  • Mac安装Typescript报错
  • macOS 上安装 Kubernetes(k8s)