idea的相关插件
工欲善其事必先利其器,想要更高效、快速的进行代码开发,则有些插件是必不可少的。
lombok插件
安装此插件后,在实体中不再需要写get、set、toString等,只需要一个注解@Data搞定,提升代码的简洁度。
Free MyBatis Tool
主要作用:mapper.java和mapper.xml之间的互相跳转;根据数据库表生成对应实体。
MyBatis Log Free
格式化打印出可以直接执行的sql语句,不需要自己替换占位符。
需要添加yml配置项:
#开启数据库语句控制台日志(生产环境下建议关闭)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
执行sql之后打印执行的语句:
项目代码结构
在mvc三层架构基础上适当进行扩展,最终的代码目录结构如下:
由上往下进行解释:
config:项目的配置类和过滤器等
controller:控制层
entity:数据库实体-和数据库表一一对应
manager:service层的进一步提取,bo放公共的实体;enums放枚举;sys放系统模块的公共逻辑等业务;utils放工具类
mapper:持久层接口
pojo:除entity之外的实体对象,bo(business object)放不便分类到其他模块的业务对象;qo(query object)放查询的请求实体;ro(result object)放返回的业务实体;so(save object)放保存操作的业务实体
service:业务逻辑层,impl下放业务逻辑实现
SysJavaApplication:项目启动入口类
resources下的mapper:持久层xml
application.yml:项目配置
test:单元测试
pom.xml:相关依赖
引入相关依赖
引入mybatis-plus
mybatis在java程序员心中的地位是毋庸置疑的,而作为mybatis增强版本的mybatis-plus,无疑使用起来更加方便。直接引入最新版本的依赖:
<!-- mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
引入knife4j
Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,,直接引入最新版(官网看版本号):
<!-- Swagger生成Api文档的增强解决方案 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
knife4j已经包含了swagger的相关包,不需要手动引入swagger,否则可能会造成冲突。此时需要添加一个配置,否则会启动保存(可能以后版本会解决此问题,若启动正常请忽略):
# 修改路径匹配模式(适配swagger3)
spring:
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
简单配置swagger3:
@EnableOpenApi
@Configuration
public class SwaggerConfiguration implements WebMvcConfigurer {
/*
http://localhost:8080/sysjava/doc.html
http://localhost:8080/sysjava/swagger-ui/
*/
@Bean
public Docket createRestApi() {
/*
DocumentationType.OAS_30:使用3.0版本
指定controller包:com.yd.sysjava.controller
所有路径
*/
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select().apis(RequestHandlerSelectors.basePackage("com.yd.sysjava.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("sys-java api")
.contact(new Contact("pansong", "", "1334881756@qq.com"))
.description("this is a project api document for sys-java ")
.version("1.0")
.build();
}
}
通过以下路径访问,愉快的进行接口调试吧:
http://localhost:8080/sysjava/doc.html
添加第一个接口
添加第一张表
数据库的设计在后面会单独进行讲解,此处先添加一张简单的测试表以供使用:
CREATE TABLE `sys_user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
`full_name` varchar(90) NOT NULL COMMENT '姓名',
`login_name` varchar(90) NOT NULL COMMENT '登录名',
`password` varchar(90) NOT NULL COMMENT '登录密码',
`tenant_id` int NOT NULL COMMENT '租户号',
`version` int NOT NULL COMMENT '版本号(乐观锁)',
`created_by` int NOT NULL COMMENT '创建人',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` int NOT NULL COMMENT '更新人',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户信息';
生成entity实体和持久层
idea连接数据库,不会操作的同学自行查询其他文章。利用之前添加的插件Free MyBatis Tool生成相关代码:
找到sys_user表,右击->MyBatis generator,生成代码之后拷贝到对应位置。删除mapper中相关的方法,之后需要得时候再添加进去。
最终的三个类:
service层
新增一个addUser接口做测试(可以链式调用是因为实体上加了@Accessors(chain = true)):
controller层
Result类是自定义的请求返回封装类,源码(不完整):
@Data
public class Result {
private Integer status;
private String msg;
private Object data;
public static Result success() {
return new Result(ResultCode.SUCCESS.getCode());
}
public static Result success(String msg) {
return new Result(ResultCode.SUCCESS.getCode(), msg);
}
public static Result success(String msg, Object data) {
return new Result(ResultCode.SUCCESS.getCode(), msg, data);
}
public static Result success(Object data) {
return new Result(ResultCode.SUCCESS.getCode(),
ResultMsg.SUCCESS.getMsg(), data);
}
public Result(Integer status) {
this.status = status;
}
public Result(Integer status, String msg) {
this.status = status;
this.msg = msg;
}
public Result(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
}
访问API文档地址
访问之前的http://localhost:8080/sysjava/doc.html,查看效果,并且进行添加用户的测试,查看打印日志,并且查看数据库是否添加成功。
小结
- 框架系列一的数据源配置有误,不知道有没有坑了同学们[表情]:
- 没有指定数据库连接池?springboot默认使用了HikariCP连接池,所以不需要指定(除非需要使用其他的)