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

前后端分离项目进阶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.xdnf.cn/news/15882.html

相关文章:

  • Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
  • Electron 主进程与渲染进程之间交互方式
  • 跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)
  • kotlin和Jetpack Compose对于Android系统来说是什么关系?
  • 【HTTP缓存机制深度解析:从ETag到实践策略】
  • c语言 进阶 动态内存管理
  • 客流分析核心算法 trajectory_event_analyzer数据结构
  • 深入解析Hadoop YARN:三层调度模型与资源管理机制
  • 单表查询-counter的使用
  • Centos卷挂载失败系统无法启动
  • c++ duiLib 使用xml文件编写界面布局
  • Protein FID:AI蛋白质结构生成模型评估新指标
  • axios二次封装-单个、特定的实例的拦截器、所有实例的拦截器。
  • Apache基础配置
  • C语言:深入理解指针(2)
  • 《汇编语言:基于X86处理器》第8章 复习题和练习,编程练习
  • Spring Cloud Gateway高危隐患
  • MySQL—表设计和聚合函数以及正则表达式
  • 2024年全国青少年信息素养大赛Scratch算法创意实践挑战赛 小高组 初赛 真题
  • Python适配器模式详解:让不兼容的接口协同工作
  • 【LeetCode数据结构】单链表的应用——环形链表问题详解
  • 详解Mysql索引合并
  • LeetCode 3202.找出有效子序列的最大长度 II:取模性质(动态规划)
  • lvs调度算法(10种)
  • TCL --- 列表_part1
  • 基于FPGA实现ARINC818
  • RocketMQ核心编程模型
  • 自动找客户软件有那些?
  • 【Linux性能优化】常用工具和实战指令
  • 深入理解浏览器解析机制和XSS向量编码