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
+
+
+
+
+
+