From 219412c68ce43c4f1dc9eb82fece88ab4dc62bc8 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Fri, 11 Jul 2025 15:13:08 +0800 Subject: [PATCH] =?UTF-8?q?:tada:=20init=E5=9F=BA=E6=9C=AC=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step2/controller/UserController.java | 69 +++++++++++++++ .../step2/controller/UsersController.java | 69 +++++++++++++++ .../com/spring/step2/domain/dto/UserDto.java | 45 ++++++++++ .../step2/domain/entity/UserEntity.java | 30 +++++++ .../com/spring/step2/domain/vo/UserVo.java | 44 ++++++++++ .../com/spring/step2/mapper/UserMapper.java | 34 ++++++++ ...e.java => InMemoryUserDetailsService.java} | 2 +- .../com/spring/step2/service/UserService.java | 49 +++++++++++ .../spring/step2/service/UsersService.java | 49 +++++++++++ .../step2/service/impl/UserServiceImpl.java | 86 +++++++++++++++++++ .../step2/service/impl/UsersServiceImpl.java | 86 +++++++++++++++++++ .../src/main/resources/mapper/UserMapper.xml | 42 +++++++++ 12 files changed, 604 insertions(+), 1 deletion(-) create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/controller/UserController.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/controller/UsersController.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/domain/dto/UserDto.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/domain/entity/UserEntity.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/domain/vo/UserVo.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/mapper/UserMapper.java rename spring-security/step-2/src/main/java/com/spring/step2/security/service/{CustomUserDetailsService.java => InMemoryUserDetailsService.java} (95%) create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/service/UserService.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/service/UsersService.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/service/impl/UserServiceImpl.java create mode 100644 spring-security/step-2/src/main/java/com/spring/step2/service/impl/UsersServiceImpl.java create mode 100644 spring-security/step-2/src/main/resources/mapper/UserMapper.xml diff --git a/spring-security/step-2/src/main/java/com/spring/step2/controller/UserController.java b/spring-security/step-2/src/main/java/com/spring/step2/controller/UserController.java new file mode 100644 index 0000000..2bb921c --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/controller/UserController.java @@ -0,0 +1,69 @@ +package com.spring.step2.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.spring.step2.domain.dto.UserDto; +import com.spring.step2.domain.entity.UserEntity; +import com.spring.step2.domain.vo.UserVo; +import com.spring.step2.domain.vo.result.PageResult; +import com.spring.step2.domain.vo.result.Result; +import com.spring.step2.domain.vo.result.ResultCodeEnum; +import com.spring.step2.service.UserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 用户 前端控制器 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +@Tag(name = "用户", description = "用户相关接口") +@RestController +@RequestMapping("/api/user/user") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + @Operation(summary = "分页查询用户", description = "分页用户") + @GetMapping("{page}/{limit}") + public Result> getUserPage( + @Parameter(name = "page", description = "当前页", required = true) + @PathVariable("page") Integer page, + @Parameter(name = "limit", description = "每页记录数", required = true) + @PathVariable("limit") Integer limit, + UserDto dto) { + Page pageParams = new Page<>(page, limit); + PageResult pageResult = userService.getUserPage(pageParams, dto); + return Result.success(pageResult); + } + + @Operation(summary = "添加用户", description = "添加用户") + @PostMapping() + public Result addUser(@Valid @RequestBody UserDto dto) { + userService.addUser(dto); + return Result.success(ResultCodeEnum.ADD_SUCCESS); + } + + @Operation(summary = "更新用户", description = "更新用户") + @PutMapping() + public Result updateUser(@Valid @RequestBody UserDto dto) { + userService.updateUser(dto); + return Result.success(ResultCodeEnum.UPDATE_SUCCESS); + } + + @Operation(summary = "删除用户", description = "删除用户") + @DeleteMapping() + public Result deleteUser(@RequestBody List ids) { + userService.deleteUser(ids); + return Result.success(ResultCodeEnum.DELETE_SUCCESS); + } +} \ No newline at end of file diff --git a/spring-security/step-2/src/main/java/com/spring/step2/controller/UsersController.java b/spring-security/step-2/src/main/java/com/spring/step2/controller/UsersController.java new file mode 100644 index 0000000..49445c2 --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/controller/UsersController.java @@ -0,0 +1,69 @@ +package com.spring.step2.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.spring.step2.domain.dto.UsersDto; +import com.spring.step2.domain.entity.UsersEntity; +import com.spring.step2.domain.vo.UsersVo; +import com.spring.step2.domain.vo.result.PageResult; +import com.spring.step2.domain.vo.result.Result; +import com.spring.step2.domain.vo.result.ResultCodeEnum; +import com.spring.step2.service.UsersService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +@Tag(name = "Csharp用户接口查询", description = "用户接口查询相关接口") +@RestController +@RequestMapping("/api/user/users") +@RequiredArgsConstructor +public class UsersController { + + private final UsersService usersService; + + @Operation(summary = "分页查询", description = "分页") + @GetMapping("{page}/{limit}") + public Result> getUsersPage( + @Parameter(name = "page", description = "当前页", required = true) + @PathVariable("page") Integer page, + @Parameter(name = "limit", description = "每页记录数", required = true) + @PathVariable("limit") Integer limit, + UsersDto dto) { + Page pageParams = new Page<>(page, limit); + PageResult pageResult = usersService.getUsersPage(pageParams, dto); + return Result.success(pageResult); + } + + @Operation(summary = "添加", description = "添加") + @PostMapping() + public Result addUsers(@Valid @RequestBody UsersDto dto) { + usersService.addUsers(dto); + return Result.success(ResultCodeEnum.ADD_SUCCESS); + } + + @Operation(summary = "更新", description = "更新") + @PutMapping() + public Result updateUsers(@Valid @RequestBody UsersDto dto) { + usersService.updateUsers(dto); + return Result.success(ResultCodeEnum.UPDATE_SUCCESS); + } + + @Operation(summary = "删除", description = "删除") + @DeleteMapping() + public Result deleteUsers(@RequestBody List ids) { + usersService.deleteUsers(ids); + return Result.success(ResultCodeEnum.DELETE_SUCCESS); + } +} \ No newline at end of file diff --git a/spring-security/step-2/src/main/java/com/spring/step2/domain/dto/UserDto.java b/spring-security/step-2/src/main/java/com/spring/step2/domain/dto/UserDto.java new file mode 100644 index 0000000..71686bb --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/domain/dto/UserDto.java @@ -0,0 +1,45 @@ +package com.spring.step2.domain.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Schema(name = "UserDTO对象", title = "用户", description = "用户的DTO对象") +public class UserDto { + + @Schema(name = "id", title = "主键") + private String id; + + @Schema(name = "username", title = "用户名") + private String username; + + @Schema(name = "password", title = "密码") + private String password; + + @Schema(name = "email", title = "邮箱") + private String email; + + @Schema(name = "createTime", title = "创建时间") + private LocalDateTime createTime; + + @Schema(name = "updateTime", title = "更新时间") + private LocalDateTime updateTime; + + @Schema(name = "createUser", title = "创建用户") + private Long createUser; + + @Schema(name = "updateUser", title = "更新用户") + private Long updateUser; + + @Schema(name = "isDeleted", title = "是否被删除") + private Boolean isDeleted; + +} \ No newline at end of file diff --git a/spring-security/step-2/src/main/java/com/spring/step2/domain/entity/UserEntity.java b/spring-security/step-2/src/main/java/com/spring/step2/domain/entity/UserEntity.java new file mode 100644 index 0000000..0515f7f --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/domain/entity/UserEntity.java @@ -0,0 +1,30 @@ +package com.spring.step2.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Getter +@Setter +@Accessors(chain = true) +@TableName("t_user") +@Schema(name = "User对象", title = "用户", description = "用户的实体类对象") +public class UserEntity extends BaseEntity { + + @Schema(name = "username", title = "用户名") + private String username; + + @Schema(name = "password", title = "密码") + private String password; + + @Schema(name = "email", title = "邮箱") + private String email; + + @Schema(name = "isDeleted", title = "是否被删除") + @TableLogic + private Boolean isDeleted; + +} \ No newline at end of file diff --git a/spring-security/step-2/src/main/java/com/spring/step2/domain/vo/UserVo.java b/spring-security/step-2/src/main/java/com/spring/step2/domain/vo/UserVo.java new file mode 100644 index 0000000..de35f48 --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/domain/vo/UserVo.java @@ -0,0 +1,44 @@ +package com.spring.step2.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Schema(name = "UserVO对象", title = "用户", description = "用户的VO对象") +public class UserVo { + + @Schema(name = "id", title = "主键") + private String id; + + @Schema(name = "username", title = "用户名") + private String username; + + @Schema(name = "password", title = "密码") + private String password; + + @Schema(name = "email", title = "邮箱") + private String email; + + @Schema(name = "createTime", title = "创建时间") + private LocalDateTime createTime; + + @Schema(name = "updateTime", title = "更新时间") + private LocalDateTime updateTime; + + @Schema(name = "createUser", title = "创建用户") + private Long createUser; + + @Schema(name = "updateUser", title = "更新用户") + private Long updateUser; + + @Schema(name = "isDeleted", title = "是否被删除") + private Boolean isDeleted; + +} + diff --git a/spring-security/step-2/src/main/java/com/spring/step2/mapper/UserMapper.java b/spring-security/step-2/src/main/java/com/spring/step2/mapper/UserMapper.java new file mode 100644 index 0000000..783a31e --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/mapper/UserMapper.java @@ -0,0 +1,34 @@ +package com.spring.step2.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.spring.step2.domain.dto.UserDto; +import com.spring.step2.domain.entity.UserEntity; +import com.spring.step2.domain.vo.UserVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 用户 Mapper 接口 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +@DS("testJwt") +@Mapper +public interface UserMapper extends BaseMapper { + + /** + * * 分页查询用户内容 + * + * @param pageParams 用户分页参数 + * @param dto 用户查询表单 + * @return 用户分页结果 + */ + IPage selectListByPage(@Param("page") Page pageParams, @Param("dto") UserDto dto); + +} diff --git a/spring-security/step-2/src/main/java/com/spring/step2/security/service/CustomUserDetailsService.java b/spring-security/step-2/src/main/java/com/spring/step2/security/service/InMemoryUserDetailsService.java similarity index 95% rename from spring-security/step-2/src/main/java/com/spring/step2/security/service/CustomUserDetailsService.java rename to spring-security/step-2/src/main/java/com/spring/step2/security/service/InMemoryUserDetailsService.java index bda4f1b..aae995a 100644 --- a/spring-security/step-2/src/main/java/com/spring/step2/security/service/CustomUserDetailsService.java +++ b/spring-security/step-2/src/main/java/com/spring/step2/security/service/InMemoryUserDetailsService.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor -public class CustomUserDetailsService implements UserDetailsService { +public class InMemoryUserDetailsService implements UserDetailsService { private final PasswordEncoder passwordEncoder; diff --git a/spring-security/step-2/src/main/java/com/spring/step2/service/UserService.java b/spring-security/step-2/src/main/java/com/spring/step2/service/UserService.java new file mode 100644 index 0000000..a591b26 --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/service/UserService.java @@ -0,0 +1,49 @@ +package com.spring.step2.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.spring.step2.domain.dto.UserDto; +import com.spring.step2.domain.entity.UserEntity; +import com.spring.step2.domain.vo.UserVo; +import com.spring.step2.domain.vo.result.PageResult; + +import java.util.List; + +/** + *

+ * 用户 服务类 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +public interface UserService extends IService { + + /** + * 分页查询用户 + * + * @return {@link UserVo} + */ + PageResult getUserPage(Page pageParams, UserDto dto); + + /** + * 添加用户 + * + * @param dto {@link UserDto} 添加表单 + */ + void addUser(UserDto dto); + + /** + * 更新用户 + * + * @param dto {@link UserDto} 更新表单 + */ + void updateUser(UserDto dto); + + /** + * 删除|批量删除用户类型 + * + * @param ids 删除id列表 + */ + void deleteUser(List ids); +} diff --git a/spring-security/step-2/src/main/java/com/spring/step2/service/UsersService.java b/spring-security/step-2/src/main/java/com/spring/step2/service/UsersService.java new file mode 100644 index 0000000..af12077 --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/service/UsersService.java @@ -0,0 +1,49 @@ +package com.spring.step2.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.spring.step2.domain.dto.UsersDto; +import com.spring.step2.domain.entity.UsersEntity; +import com.spring.step2.domain.vo.UsersVo; +import com.spring.step2.domain.vo.result.PageResult; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +public interface UsersService extends IService { + + /** + * 分页查询 + * + * @return {@link UsersVo} + */ + PageResult getUsersPage(Page pageParams, UsersDto dto); + + /** + * 添加 + * + * @param dto {@link UsersDto} 添加表单 + */ + void addUsers(UsersDto dto); + + /** + * 更新 + * + * @param dto {@link UsersDto} 更新表单 + */ + void updateUsers(UsersDto dto); + + /** + * 删除|批量删除类型 + * + * @param ids 删除id列表 + */ + void deleteUsers(List ids); +} diff --git a/spring-security/step-2/src/main/java/com/spring/step2/service/impl/UserServiceImpl.java b/spring-security/step-2/src/main/java/com/spring/step2/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..afffad5 --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/service/impl/UserServiceImpl.java @@ -0,0 +1,86 @@ +package com.spring.step2.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.spring.step2.domain.dto.UserDto; +import com.spring.step2.domain.entity.UserEntity; +import com.spring.step2.domain.vo.UserVo; +import com.spring.step2.domain.vo.result.PageResult; +import com.spring.step2.mapper.UserMapper; +import com.spring.step2.service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + *

+ * 用户 服务实现类 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +@DS("testJwt") +@Service +@Transactional +@RequiredArgsConstructor +public class UserServiceImpl extends ServiceImpl implements UserService { + + /** + * * 用户 服务实现类 + * + * @param pageParams 用户分页查询page对象 + * @param dto 用户分页查询对象 + * @return 查询分页用户返回对象 + */ + @Override + public PageResult getUserPage(Page pageParams, UserDto dto) { + IPage page = baseMapper.selectListByPage(pageParams, dto); + + return PageResult.builder() + .list(page.getRecords()) + .pageNo(page.getCurrent()) + .pageSize(page.getSize()) + .total(page.getTotal()) + .build(); + } + + /** + * 添加用户 + * + * @param dto 用户添加 + */ + @Override + public void addUser(UserDto dto) { + UserEntity user = new UserEntity(); + BeanUtils.copyProperties(dto, user); + save(user); + } + + /** + * 更新用户 + * + * @param dto 用户更新 + */ + @Override + public void updateUser(UserDto dto) { + UserEntity user = new UserEntity(); + BeanUtils.copyProperties(dto, user); + updateById(user); + } + + /** + * 删除|批量删除用户 + * + * @param ids 删除id列表 + */ + @Override + public void deleteUser(List ids) { + removeByIds(ids); + } +} \ No newline at end of file diff --git a/spring-security/step-2/src/main/java/com/spring/step2/service/impl/UsersServiceImpl.java b/spring-security/step-2/src/main/java/com/spring/step2/service/impl/UsersServiceImpl.java new file mode 100644 index 0000000..26cf34b --- /dev/null +++ b/spring-security/step-2/src/main/java/com/spring/step2/service/impl/UsersServiceImpl.java @@ -0,0 +1,86 @@ +package com.spring.step2.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.spring.step2.domain.dto.UsersDto; +import com.spring.step2.domain.entity.UsersEntity; +import com.spring.step2.domain.vo.UsersVo; +import com.spring.step2.domain.vo.result.PageResult; +import com.spring.step2.mapper.UsersMapper; +import com.spring.step2.service.UsersService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author Bunny + * @since 2025-07-11 14:49:46 + */ +@DS("testJwt") +@Service +@Transactional +@RequiredArgsConstructor +public class UsersServiceImpl extends ServiceImpl implements UsersService { + + /** + * * 服务实现类 + * + * @param pageParams 分页查询page对象 + * @param dto 分页查询对象 + * @return 查询分页返回对象 + */ + @Override + public PageResult getUsersPage(Page pageParams, UsersDto dto) { + IPage page = baseMapper.selectListByPage(pageParams, dto); + + return PageResult.builder() + .list(page.getRecords()) + .pageNo(page.getCurrent()) + .pageSize(page.getSize()) + .total(page.getTotal()) + .build(); + } + + /** + * 添加 + * + * @param dto 添加 + */ + @Override + public void addUsers(UsersDto dto) { + UsersEntity users = new UsersEntity(); + BeanUtils.copyProperties(dto, users); + save(users); + } + + /** + * 更新 + * + * @param dto 更新 + */ + @Override + public void updateUsers(UsersDto dto) { + UsersEntity users = new UsersEntity(); + BeanUtils.copyProperties(dto, users); + updateById(users); + } + + /** + * 删除|批量删除 + * + * @param ids 删除id列表 + */ + @Override + public void deleteUsers(List ids) { + removeByIds(ids); + } +} \ No newline at end of file diff --git a/spring-security/step-2/src/main/resources/mapper/UserMapper.xml b/spring-security/step-2/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..d65359a --- /dev/null +++ b/spring-security/step-2/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + id,username,password,email,create_time,update_time,create_user,update_user,is_deleted + + + + + +