# program01-user **Repository Path**: lsq-eternally/program01-user ## Basic Information - **Project Name**: program01-user - **Description**: 综合使用 Spring Boot 与 JPA,实现用户管理系统。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-16 - **Last Updated**: 2025-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、功能需求: ```java • 使用 Spring Boot 框架搭建一个 REST API 服务。 • 实现用户的创建、新增、查询、更新和删除(CRUD)。 • 要求使用 Spring Data JPA 实现自动化 SQL 生成。 • 实现用户列表的分页和排序功能。 ``` ## 二、技术要点: ```java • Spring Boot 基本结构 • Spring Data JPA 的 Repository 机制与自动 SQL 查询方法 • 分页与排序功能实现(PageRequest、Sort) • JPA 实体映射和注解的应用(@Entity, @Id, @GeneratedValue,@Column, @Repository 等) ``` ### 三、核心功能 ```java 用户管理 CRUD 操作:实现了对用户信息的创建、新增、查询、更新和删除操作,为用户信息的全生命周期管理提供了完整的解决方案。 自动化 SQL 生成:借助 Spring Data JPA,项目能够自动生成 SQL 语句, 减少了手动编写 SQL 的工作量,提高了开发效率,同时降低了出错的可能性。 用户列表分页与排序:支持对用户列表进行分页和排序操作,方便用户根据自己的需求查看和管理用户信息,提升了用户体验。 ``` ### 四、技术架构 ```java 框架:采用 Spring Boot 框架,其提供了快速开发和便捷配置的特性,使项目的搭建和部署更加高效。 数据访问:使用 Spring Data JPA 进行数据访问,它是 Spring 提供的用于简化数据库操作的强大工具,能够与多种数据库进行集成。 数据库:项目中使用 MySQL 作为数据库,通过 mysql-connector-java 驱动实现与数据库的连接和交互。 ``` ## 五、项目环境 - **开发语言**:Java 11 - **开发框架**:Spring Boot 2.7.0 - **数据库**:MySQL 8.0.28 - **构建工具**:Maven 3.5.4 - **开发工具**:IntelliJ IDEA ## 六、、项目依赖 - Spring Boot Starter Web - Spring Boot Starter Data JPA - MySQL Connector Java - Lombok - Spring Boot Starter Test ## 七、项目结构 ```plaintext ├─main │ ├─java │ │ └─com │ │ └─example │ │ └─demo │ │ │ DemoApplication.java │ │ │ │ │ ├─controller │ │ │ UserController.java │ │ │ │ │ ├─entity │ │ │ User.java │ │ │ │ │ ├─repository │ │ │ UserRepository.java │ │ │ │ │ └─service │ │ UserService.java │ │ │ └─resources │ application.properties │ └─test └─java ``` ## 八、数据库设计 ### 用户表(user_management) | 字段名 | 类型 | 是否为空 | 描述 | | ------------ | ------- | -------- | ------------------- | | id | BIGINT | 否 | 用户 ID,主键,自增 | | name | VARCHAR | 否 | 用户姓名 | | phone_number | VARCHAR | 否 | 用户电话号码,唯一 | ## 九、接口调用 API ### 1. 获取所有用户信息 - **请求 URL**:`GET /` - **响应数据**: ```json [ { "id": 1, "name": "张三", "phoneNumber": "13800138000" }, { "id": 2, "name": "李四", "phoneNumber": "13900139000" } ] ``` ### 2. 根据 ID 获取用户信息 - **请求 URL**:`GET /{id}` - **响应数据**: ```json { "id": 1, "name": "张三", "phoneNumber": "13800138000" } ``` ### 3. 创建新用户 - **请求 URL**:`POST /` - **请求体**: ```json { "name": "王五", "phoneNumber": "13700137000" } ``` - **响应数据**: ```json { "id": 3, "name": "王五", "phoneNumber": "13700137000" } ``` ### 4. 更新用户信息 - **请求 URL**:`PUT /{id}` - **请求体**: ```json { "name": "赵六", "phoneNumber": "13600136000" } ``` - **响应数据**: ```json { "id": 3, "name": "赵六", "phoneNumber": "13600136000" } ``` ### 5. 删除用户信息 - **请求 URL**:`DELETE /{id}` - **响应数据**:无 ### 6. 分页与排序获取用户信息 - **请求 URL**:`GET /pagination?page=0&size=10&sortBy=name` - **响应数据**: ```json { "content": [ { "id": 1, "name": "张三", "phoneNumber": "13800138000" }, { "id": 2, "name": "李四", "phoneNumber": "13900139000" } ], "pageable": { "sort": { "sorted": true, "unsorted": false, "empty": false }, "offset": 0, "pageSize": 10, "pageNumber": 0, "unpaged": false, "paged": true }, "last": false, "totalPages": 1, "totalElements": 2, "size": 10, "number": 0, "sort": { "sorted": true, "unsorted": false, "empty": false }, "first": true, "numberOfElements": 2, "empty": false } ``` ## 八、测试用例(使用 Postman) ### 1. 获取所有用户信息 - **请求方式**:GET - **请求 URL**:`http://localhost:8080/` - **预期结果**:返回用户列表 ### 2. 根据 ID 获取用户信息 - **请求方式**:GET - **请求 URL**:`http://localhost:8080/1` - **预期结果**:返回 ID 为 1 的用户信息 ### 3. 创建新用户 - **请求方式**:POST - **请求 URL**:`http://localhost:8080/` - **请求体**: ```json { "name": "测试用户", "phoneNumber": "12345678901" } ``` - **预期结果**:返回新创建的用户信息 ### 4. 更新用户信息 - **请求方式**:PUT - **请求 URL**:`http://localhost:8080/1` - **请求体**: ```json { "name": "更新后的用户", "phoneNumber": "09876543210" } ``` - **预期结果**:返回更新后的用户信息 ### 5. 删除用户信息 - **请求方式**:DELETE - **请求 URL**:`http://localhost:8080/1` - **预期结果**:无返回内容,数据库中该用户信息被删除 ### 6. 分页与排序获取用户信息 - **请求方式**:GET - **请求 URL**:`http://localhost:8080/pagination?page=0&size=10&sortBy=name` - **预期结果**:返回分页排序后的用户列表 ## 十、核心业务代码展示 ### UserService.java ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { return userRepository.findAll(); } public Optional getUserById(Long id) { return userRepository.findById(id); } public User createUser(User user) { return userRepository.save(user); } public User updateUser(Long id, User userDetails) { User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found")); user.setName(userDetails.getName()); user.setPhoneNumber(userDetails.getPhoneNumber()); return userRepository.save(user); } public void deleteUser(Long id) { userRepository.deleteById(id); } public Page getUsersWithPaginationAndSorting(int page, int size, String sortBy) { PageRequest pageRequest = PageRequest.of(page, size, Sort.by(sortBy)); return userRepository.findAll(pageRequest); } } ``` ### UserController.java ```java @RestController @RequestMapping @CrossOrigin public class UserController { @Autowired private UserService userService; @GetMapping public List getAllUsers() { return userService.getAllUsers(); } @GetMapping("/{id}") public Optional getUserById(@PathVariable Long id) { return userService.getUserById(id); } @PostMapping public User createUser(@RequestBody User user) { return userService.createUser(user); } @PutMapping("/{id}") public User updateUser(@PathVariable Long id, @RequestBody User userDetails) { return userService.updateUser(id, userDetails); } @DeleteMapping("/{id}") public void deleteUser(@PathVariable Long id) { userService.deleteUser(id); } @GetMapping("/pagination") public Page getUsersWithPaginationAndSorting( @RequestParam int page, @RequestParam int size, @RequestParam String sortBy) { return userService.getUsersWithPaginationAndSorting(page, size, sortBy); } } ```