前端链接:前端解析
一.项目目录

二.关键代码分析
1)Admin.java
java
package improv1.improv1.entity;
public class Admin {
private String account;
private String password;
private String name;
// 构造方法、getter和setter
public Admin() {
}
public Admin(String account, String password, String name) {
this.account = account;
this.password = password;
this.name = name;
}
// Getters and Setters
public 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来获取数据库表的对应数据,
java// 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
注解:
java@Select("SELECT * FROM admin") @MapKey("account") // 返回Map结构,key=account,value=记录Map Map<String, Map<String, Object>> findAllAsMap();
2)AdminMapper.java
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
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 {
@Autowired
private AdminMapper adminMapper;
@GetMapping
public List<Admin> getAllAdmins() {
return adminMapper.findAll();
}
@GetMapping("/{account}")
public Admin getAdminByAccount(@PathVariable String account) {
return adminMapper.findByAccount(account);
}
@PostMapping
public 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/1 ) |
HTTP 请求体(Body) |
数据格式 | 简单类型(数字、字符串) | JSON/XML(复杂对象) |
适用方法 | GET 、DELETE |
POST 、PUT |
示例请求 | GET /users/1 |
POST /users + JSON |
Content-Type | 不需要指定 | 需指定(如 application/json ) |