web9使用RESTful完整项目的用户增删改查的项目代码

📅 2026/7/1 2:19:45
web9使用RESTful完整项目的用户增删改查的项目代码
一、项目概述本次项目使用Spring Boot MyBatis SQL Server构建了一个完整的用户管理 RESTful API实现了用户的增删改查CRUD功能。项目结构pet_web_crud/ ├── src/main/java/com/example/ │ ├── PetWebCrudApplication.java // 启动类 │ ├── controller/ │ │ └── UserController.java // 控制器层RESTful接口 │ ├── service/ │ │ ├── UserService.java // 业务接口 │ │ └── impl/ │ │ └── UserServiceImpl.java // 业务实现 │ ├── mapper/ │ │ └── UserMapper.java // 数据访问层 │ └── pojo/ │ ├── User.java // 实体类 │ └── Result.java // 统一返回结果 ├── src/main/resources/ │ └── application.properties // 配置文件 └── pom.xml // 依赖管理二、RESTful 风格的理解与实践什么是 RESTfulRESTful 是一种 API 设计规范核心思想是用 URL 表示资源名词复数形式用 HTTP 方法表示操作GET/POST/PUT/DELETE用状态码表示结果200/404/500我的 RESTful 接口设计功能HTTP方法URL说明查询所有用户GET/api/users获取用户列表搜索用户GET/api/users?keywordxxx按关键词搜索查询单个用户GET/api/users/{id}获取指定ID用户新增用户POST/api/users添加新用户修改用户PUT/api/users更新用户信息删除用户DELETE/api/users/{id}删除指定用户传统风格 vs RESTful 风格对比操作传统风格RESTful风格我的实现查询列表GET/user/listGET/api/users查询单个GET/user/find?id1GET/api/users/1新增POST/user/addPOST/api/users修改POST/user/updatePUT/api/users删除GET/user/delete?id1DELETE/api/users/1RESTful 核心注解使用javaRestController // 标识为REST控制器返回JSON RequestMapping(/api/users) // 统一资源路径 GetMapping // 处理GET请求 PostMapping // 处理POST请求 PutMapping // 处理PUT请求 DeleteMapping // 处理DELETE请求 PathVariable // 获取URL路径参数 RequestBody // 获取请求体JSON数据 RequestParam // 获取URL查询参数三、开发过程中的问题与解决环境与配置问题问题原因解决方案项目无法启动pom.xml缺少packagingjar/packaging添加 packaging 标签端口 8080 被占用其他进程占用修改端口或关闭占用进程数据库连接问题问题原因解决方案驱动类找不到使用了 MySQL 驱动但用 SQL Server改用com.microsoft.sqlserver.jdbc.SQLServerDriverSQL Server 语法错误MySQL 和 SQL Server 语法不同用IDENTITY(1,1)替代AUTO_INCREMENT表名报错SQL Server 关键字冲突用方括号[users]包裹表名后端代码问题问题原因解决方案Field peotMapper required a beanMyBatis 没扫描到 Mapper添加MapperScan(com.example.mapper)找不到符号 Result.errorResult.java缺少error方法添加public static Result error(String msg)找不到符号 setPasswordUser.java缺少setPassword方法添加 Getter/Setter类名与文件名不匹配改了类名没改文件名保持类名和文件名一致前端页面问题问题原因解决方案页面 404HTML 不在static目录移到src/main/resources/static/数据不显示请求地址错误检查/api/users是否正确CORS 跨域错误前后端端口不同后端添加CrossOrigin(origins *)项目名问题问题原因解决方案Maven 显示peot_web_crudpom.xml中 artifactId 是peot改成artifactIdpet_web_crud/artifactIdSQL Server 保留关键字冲突现象SQL: SELECT * FROM user ORDER BY id DESC Cause: 关键字 user 附近有语法错误原因user是 SQL Server 的保留关键字不能直接作为表名解决两种方案表名加方括号SELECT * FROM [user]表名改为复数user→users我选择了方案2并统一使用[users]避免冲突收获学习了 SQL Server 保留关键字问题以及[]的转义用法前后端接口路径不匹配现象访问/userfindAll返回404实际接口是/api/users原因前端请求路径和后端Controller路径不一致解决统一使用/api/users作为基础路径利用RequestMapping(/api/users)统一管理收获理解了前后端分离中接口路径统一的重要性静态页面无数据现象页面显示了但表格是空的原因静态HTML不会自动获取数据需要前后端联动解决后端提供 RESTful API 接口前端通过 fetch/AJAX 调用接口获取数据收获理解了前后端分离的工作模式三、CRUD 功能完整流程查询Readext用户打开页面 → Vue mounted() → axios.get(/api/users) → UserController.list() → UserService.search() → UserMapper.findAll() → SQL查询 → 返回JSON → 表格渲染新增Create点击新增用户 → 跳转 user_insert.html → 填写表单 → 点击确认新增 → axios.post(/api/users, data) → UserController.add() → UserService.insert() → UserMapper.insert() → SQL插入 → 跳转回列表页修改Update点击修改 → 跳转 user_edit.html?id1 → 加载数据回显 → 修改表单 → 点击保存修改 → axios.put(/api/users, data) → UserController.update() → UserService.update() → UserMapper.update() → SQL更新 → 跳转回列表页删除Delete点击删除 → 跳转 user_delete.html?id1 → 显示确认信息 → 点击确认删除 → axios.delete(/api/users/1) → UserController.delete() → UserService.delete() → UserMapper.delete() → SQL删除 → 跳转回列表页四、核心知识点1. Spring Boot 注解注解作用SpringBootApplication启动类RestControllerREST 控制器RequestMapping/GetMapping路由映射Autowired依赖注入Service服务层组件MapperMyBatis Mapper2. MyBatis 注解注解作用Select查询Insert插入Update更新Delete删除3. Vue.js 核心概念作用el: #app绑定容器data()数据v-for循环渲染v-model双向绑定mounted()页面加载后执行methods方法4. HTTP 请求方法对应 CRUD操作HTTP 方法说明查询GET获取数据新增POST创建数据修改PUT更新数据删除DELETE删除数据五、各层之间的链接关系完整请求流程浏览器/Apifox ↓ (GET /api/users) [Controller层] UserController ↓ 调用 userService.search(keyword) [Service层] UserServiceImpl ↓ 调用 userMapper.search(keyword) [Mapper层] UserMapper ↓ 执行 SQL: SELECT * FROM [users] WHERE ... [数据库] SQL Server ↓ 返回数据 ListUser [Mapper层] 将数据封装为 User 对象 ↓ 返回数据 [Service层] 处理业务逻辑 ↓ 返回 ListUser [Controller层] 封装为 Result.success(users) ↓ 返回 JSON 浏览器/Apifox (收到JSON数据)各层职责说明层级职责注解Controller接收请求返回响应RestController,RequestMappingService处理业务逻辑ServiceMapper操作数据库MapperPOJO数据实体无特殊注解数据流转过程java// 1. 前端发送请求 GET /api/users // 2. Controller 接收请求 GetMapping public Result list(RequestParam(required false) String keyword) { // 3. 调用 Service ListUser users userService.search(keyword); // 6. 返回统一格式响应 return Result.success(users); } // 4. Service 处理业务逻辑 Override public ListUser search(String keyword) { // 5. 调用 Mapper 操作数据库 return userMapper.search(keyword); } // 7. Mapper 执行 SQL Select(SELECT * FROM [users] WHERE username LIKE CONCAT(%, #{keyword}, %)) ListUser search(String keyword);统一响应格式json{ code: 200, message: success, data: [ { id: 1, username: admin, name: 管理员, role: 管理员, phone: 13800000000, email: adminexample.com, address: 北京市 } ] }各环节的详细链接前端 → 后端HTTP 请求javascript// 前端 (user_list.html) axios.get(/api/users) .then(res { this.userList res.data.data; }); java // 后端 (UserController.java) GetMapping(/api/users) public Result list() { return Result.success(userService.findAll()); }Controller → Service依赖注入java// UserController.java Autowired // ← Spring 自动注入 private UserService userService; // UserServiceImpl.java Service // ← 标记为 Service 组件 public class UserServiceImpl implements UserService { ... }Service → Mapper数据访问java// UserServiceImpl.java Autowired // ← 自动注入 Mapper private UserMapper userMapper; // UserMapper.java Mapper // ← 标记为 MyBatis Mapper public interface UserMapper { ... }Mapper → 数据库SQL 执行javaSelect(SELECT * FROM [users] ORDER BY id DESC) ListUser findAll();六、关键技术栈总结技术作用关键点Spring Boot框架基础自动配置简化开发MyBatisORM框架通过注解操作数据库SQL Server数据库注意保留关键字用[]Maven项目构建依赖管理打包部署RESTful接口规范URLHTTP方法操作七、学习收获1. RESTful 设计规范URL 使用名词复数表示资源HTTP 方法表示操作GET/POST/PUT/DELETE路径参数传递资源ID2. Spring Boot 分层架构Controller → Service → Mapper 三层结构每层职责清晰便于维护和测试3. 前后端分离模式后端只提供 JSON 数据接口前端通过 AJAX/fetch 获取数据并渲染4. 异常处理与调试学会通过错误日志定位问题理解 SQL 语法错误、路径错误、表名错误等常见问题八、测试验证所有接口通过 Apifox 测试验证通过接口测试结果GET/api/users返回所有用户列表GET/api/users?keywordadmin返回搜索匹配的用户GET/api/users/1返回指定ID用户POST/api/users成功新增用户PUT/api/users成功修改用户DELETE/api/users/1成功删除用户最终效果添加用户删除用户改用户信息查找用户