用户表设计
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `username` varchar(256) DEFAULT NULL COMMENT '用户名', `password` varchar(512) DEFAULT NULL COMMENT '密码', `real_name` varchar(256) DEFAULT NULL COMMENT '真实姓名', `phone` varchar(128) DEFAULT NULL COMMENT '手机号', `mail` varchar(512) DEFAULT NULL COMMENT '邮箱', `deletion_time` bigint(20) DEFAULT NULL COMMENT '注销时间戳', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '修改时间', `del_flag` tinyint(1) DEFAULT NULL COMMENT '删除标识 0:未删除 1:已删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
在父工程的pom.xml文件中引入持久层框架以及Lombok依赖
在dependencyManagement标签中引入的依赖并不会真实下载,在子工程中定义使用了相关依赖才会真实下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency>
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
|
在dependencies标签中引入的依赖会真实下载
1 2 3 4 5 6
| <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
|
在子工程的application.yml文件中添加持久层配置项
1 2 3 4 5 6 7 8 9 10 11 12
| spring: datasource: username: root password: root url: jdbc:mysql://127.0.0.1:3306/link?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8 driver-class-name: com.mysql.cj.jdbc.Driver hikari: connection-test-query: select 1 connection-timeout: 20000 idle-timeout: 300000 maximum-pool-size: 5 minimum-idle: 5
|
添加@MapperScan注解
在启动类中添加持久层接口扫描器,减少不必要的性能消耗
1
| @MapperScan("com.xxx.dao.mapper")
|
创建DO
在src/main/java/.../dao/entity路径下新建数据库表实体类
将建表语句粘贴到
凝聚力JAVA开发可自动生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| /** * 用户持久层实体 */ @Data @TableName("t_user") public class UserDO extends BaseDO {
/** * id */ private Long id;
/** * 用户名 */ private String username;
/** * 密码 */ private String password;
/** * 真实姓名 */ private String realName;
/** * 手机号 */ private String phone;
/** * 邮箱 */ private String mail;
/** * 注销时间戳 */ private Long deletionTime; }
|
创建mapper
在src/main/java/.../dao/mapper路径下新建数据持久层接口XXXMapper
1 2 3 4 5
| /** * 用户持久层 */ public interface UserMapper extends BaseMapper<UserDO> { }
|
创建对应的service和impl
在src/main/java/.../service路径下创建XXX接口层
1 2 3 4 5
| /** * 用户接口层 */ public interface UserService extends IService<UserDO> { }
|
在src/main/java/.../service/impl路径下创建XXX接口实现类
1 2 3 4 5 6 7
| /** * 用户接口实现层 */ @Service @RequiredArgsConstructor public class UserServiceImpl extends ServiceImpl<UserMapper, UserDO> implements UserService { }
|
新建XXXRespDTO
在src/main/java/.../dto/resp路径下新建UserRespDTO,用作返回响应参数实体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| /** * 用户返回参数响应 */ @Data public class UserRespDTO {
/** * id */ private Long id;
/** * 用户名 */ private String username;
/** * 真实姓名 */ private String realName;
/** * 手机号 */ @JsonSerialize(using = PhoneDesensitizationSerializer.class) private String phone;
/** * 邮箱 */ private String mail;
/** * 注销时间戳 */ private Long deletionTime;
/** * 创建时间 */ private Date createTime;
/** * 修改时间 */ private Date updateTime;
/** * 删除标识 0:未删除 1:已删除 */ private Integer delFlag; }
|
在controller中新建接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @RestController @RequiredArgsConstructor public class UserController {
private final UserService userService;//通过构造器的方式注入userService
/** * 根据用户名查询用户信息 */ @GetMapping("/api/short-link/admin/v1/user/{username}") public Result<UserRespDTO> getUserByUsername(@PathVariable("username") String username) { return Results.success(userService.getUserByUsername(username)); } }
|
Alt+Enter
对着controller中的getUserByUsername按Alt+Enter
用户接口层的userService中自动新增以下内容
因为controller中用的是userService.getUserByUsername()
1 2 3 4 5 6 7
| /** * 根据用户名查询用户信息 * * @param username 用户名 * @return 用户返回实体 */ UserRespDTO getUserByUsername(String username);
|
对着userService中的getUserByUsername按Alt+Enter
在UserServiceImpl中会自动生成以下代码
1 2 3
| @Override public UserRespDTO getUserByUsername(String username) { }
|
编写SQL语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Override public UserRespDTO getUserByUsername(String username) {
LambdaQueryWrapper<UserDO> queryWrapper = Wrappers.lambdaQuery(UserDO.class) .eq(UserDO::getUsername, username); UserDO userDO = baseMapper.selectOne(queryWrapper); if (userDO == null) { throw new ClientException(UserErrorCodeEnum.USER_NULL); } UserRespDTO result = new UserRespDTO(); BeanUtils.copyProperties(userDO, result); // 此方法需要判空才可以,否则会报错 return result;
}
|