- 前言
- 一、简单项目的创建
- 二、常用依赖的引入
- 三、常用配置的编写
- 四、逆向工程的使用
- 五、常用类的编写
- 1. 自定义常量类
- 2. 自定义注解类
- 3. 自定义枚举类
- 4. 自定义异常类
- 5. 通用响应对象
- 6. 简单接口编写
- 7. 常用的工具类
- 六、网盘下载
前言
关于怎么搭建 SpringBoot 项目,我相信大部分开发者自己都能搭建好,至于我为什么还要写,主要是我自己觉得搭一个项目挺麻烦的,想搞一个基础的模子,以后学习其它的技术就可以直接引用这个模子,写下笔记便于日后回顾和修改,顺便发下博客。
注意:以下项目创建方式以及项目内容完全是根据个人喜好而搭建的,仅具借鉴意义~~
一、简单项目的创建
这里项目的创建,我使用的工具是 IDEA,还有一个很重要的事情就是管理项目,这里我建议项目最好有一个集中的地方管理,所以我创建了一个 my-project 的文件夹专门用于管理自己的项目。
打开 IDEA 工具,点击 File -> New -> Project... 创建一个项目
选择 Sring Initializr (如果你用的是 IDEA 社区版的可能没有这个选项),完善以下资料,然后点击 Next
选择 SpringBoot 版本,点击 Finish
然后一个最简单的 spring-boot 项目就建好了,如果你只是为了创建一个 spring-boot 项目的话,到这里就可以结束了,以下内容很多东西都是按照我个人意愿去编写的,并不具有通用性,但是仍可借鉴使用~~
简单完善一下目录结构
- com.duojiala.mikeboot
- common ------------------------------------公共定义类
- config ----------------------------------------配置类
- controller -----------------------------------控制层
- dao -------------------------------------------dao层
- domain
- annotations --------------------------注解类
- bean -----------------------------------自定义类
- dto --------------------------------------组装对象类
- entity ----------------------------------实体类
- enums ---------------------------------枚举类
- req --------------------------------------请求体
- resp ------------------------------------响应体
- exceptions ------------------------------自定义异常类
- service ------------------------------------服务层
- imp -------------------------------------实现类
- utils -------------------------------------------工具类
PS:以上并非标准,项目结构你可以根据自己的需求或者喜好去设计
二、常用依赖的引入之前在创建项目的时候其实是可以选择添加依赖的,但是我没有去做,所以如果你按照我上述步骤创建项目的话,pom.xml 文件中只有两个依赖,如下:
接下来就是引入一些常用的依赖,供大家参考:
SpringBoot 项目的启动依赖:如果没有添加该依赖,启动类一运行会直接停止
org.springframework.boot spring-boot-starter-web compile
lombok 依赖插件:方便实体类 bean 快速生成 get set方法,从而不用手动添加
org.projectlombok lombok
通用Mapper依赖:是对底层 sql 进行了抽象封装,不需要考虑 sql 怎么写,只需要按照逻辑思维,遵循 tkmybatis 的语法即可实现数据库操作。
tk.mybatis mapper-spring-boot-starter 2.1.5
JDBC驱动包:用 JDBC 连接 MySQL 数据库时必须使用该 jar 包,能够与数据库建立连接、发送 SQL 语句以及处理结果。
mysql mysql-connector-java
校验参数:就是一个规范,所有实现类必须是线程安全的,提供一些注解,但并不提供实现,可以根据需求去写一些有校验功能的注解。
org.springframework.boot spring-boot-starter-validation
Fastjson:是一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种 “假定有序快速匹配” 的算法,把 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。Fastjson 接口简单易用,已经呗广泛使用在序列化、协议交互、Web 输出、Android 客户端等多种应用场景。
com.alibaba fastjson 1.2.51
Spring web依赖
org.springframework spring-web
mybatis 自动配置依赖
org.mybatis.spring.boot mybatis-spring-boot-autoconfigure 2.1.1
表格依赖
com.alibaba easyexcel 2.2.7 org.apache.poi poi-ooxml 3.17
添加 mybatis 逆向工程插件,generator 的配置文件这里我放在 /resources/generator 目录下
org.mybatis.generator mybatis-generator-maven-plugin 1.3.6 ${basedir}/src/main/resources/generator/generatorConfig.xml true true mysql mysql-connector-java 8.0.13 tk.mybatis mapper 4.1.5
最后我 pom.xml 文件的配置如下:
三、常用配置的编写4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASE com.duojiala mike-boot 0.0.1-SNAPSHOT mike-boot Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web compile org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.apache.commons commons-lang3 3.10 org.projectlombok lombok tk.mybatis mapper-spring-boot-starter 2.1.5 mysql mysql-connector-java org.springframework.boot spring-boot-starter-validation com.alibaba fastjson 1.2.51 org.springframework spring-web org.mybatis.spring.boot mybatis-spring-boot-autoconfigure 2.1.1 com.alibaba easyexcel 2.2.7 org.apache.poi poi-ooxml 3.17 org.springframework.boot spring-boot-maven-plugin org.mybatis.generator mybatis-generator-maven-plugin 1.3.6 ${basedir}/src/main/resources/generator/generatorConfig.xml true true mysql mysql-connector-java 8.0.13 tk.mybatis mapper 4.1.5
这里自动创建的项目,配置文件默认是 properties 的文件,这里我改用成 yml 格式的(仅仅是个人习惯的问题)
application.yml 常用配置的编写:
server:
port: 8868
servlet:
context-path: /mike
spring:
application:
name: mike-boot
# 数据库配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/mike?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
hikari:
username: 'root'
password: 'root'
driver-class-name: 'com.mysql.cj.jdbc.Driver'
mybatis:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
四、逆向工程的使用
之前在常用依赖引入中有引入 mybatis 逆向工程的插件,这里主要就是去编写逆向工程的一些配置文件,以及使用
首先需要在 resources 目录下创建文件夹 com/duojiala/mikeboot/dao 目录(要和你 dao 目录相一致),如果你用 IDEA 创建的话,切记不可直接 com.duojiala.mikeboot.dao 这样创建,因为这样创建的文件夹只是一个名字叫做 com.duojiala.mikeboot.dao 的文件夹,并非多层目录,比如:
用 IDEA 要一个一个创建
在创建一个 generator 的文件夹,该文件夹下面加上两个配置文件 config.properties 和 generatorConfig.xml,做完以上步骤之后大概是这样的
config.properties 中配置编写:
jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/mike?useSSL=false&characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8 jdbc.user=root jdbc.password=root javaModelTargetProject=src/main/java javaModelTargetPackage=com.duojiala.mikeboot.domain.entity mapperXMLTargetProject=src/main/resources mapperXMLTargetPackage=com.duojiala.mikeboot.dao mapperTargetProject=src/main/java mapperTargetPackage=com.duojiala.mikeboot.dao
这里你要换成你自己的数据库,以及对应的映射关系要以你自己的项目去修改。
generatorConfig.xml 中配置编写:
现在我连接的是我本地数据,该库里面只有一张 user 表
现在通过 mybatis 逆向工程生成 user 表对应的 实体类 和 mapper 文件,按如下步骤
执行完可以看见项目中已经生成了所配置数据库中所有表的映射实体类和 Mapper 文件
如果你想要针对某一张表生成对应的映射实体类和 Mapper 文件,可将 generatorConfig.xml 文件中
同时,还需要在启动类上加上 @MapperScan 的注解扫描 mapper:@MapperScan(basePackages = {"com.duojiala.mikeboot.dao"})
位于 common 目录下,创建示例类 DefineConstants.java
public class DefineConstants {
public static final String DEF_NUMBER = "0";
public static final String DEF_MONEY = "0.00";
}
2. 自定义注解类
位于 annotations 目录下,创建示例类 Describe.java
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//@Constraint(validatedBy = EnumParamCheck.DecimalParamCheckValidator.class)
public @interface Describe {
String desc();
}
3. 自定义枚举类
位于 enums 目录下,创建性别枚举类 GenderEnum.java
@Getter
@AllArgsConstructor
public enum GenderEnum {
WOMAN(0,"女"),
MAN(1,"男")
;
private final int type;
private final String desc;
public static GenderEnum getGenderEnum(int type) {
return Stream.of(values()).filter(value -> value.getType()==type).findFirst().orElse(null);
}
public static String getDescByType(int type) {
GenderEnum genderEnum = getGenderEnum(type);
if (genderEnum==null) return null;
return genderEnum.getDesc();
}
}
位于 enums 目录下,再创建一个自定义异常枚举 ExceptionEnum.java
@AllArgsConstructor
@Getter
@ToString
public enum ExceptionEnum {
BAD_REQUEST(301, "错误的请求"),
NOT_FIND(302,"未找到对应数据")
;
private final int code;
private final String msg;
}
4. 自定义异常类
位于 exceptions 目录下,创建自定义公共异常 CommonException.java
public class CommonException extends RuntimeException{
private ExceptionEnum exceptionEnum;
public CommonException(ExceptionEnum exceptionEnum) {
super(exceptionEnum.getMsg());
this.exceptionEnum = exceptionEnum;
}
public void setExceptionEnum(ExceptionEnum exceptionEnum) {
this.exceptionEnum = exceptionEnum;
}
public ExceptionEnum getExceptionEnum() {
return exceptionEnum;
}
@Override
public String getMessage() {
return this.exceptionEnum.getMsg();
}
}
5. 通用响应对象
位于 dto 目录下,创建一个通用的响应对象 ResponseBean.java
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Slf4j
public class ResponseBean {
private int code;
private String msg;
private Object data;
public static int SUCCESS_CODE = 200;
public static int ERROR_CODE = 300;
public static String SUCCESS_MSG = "Success";
public static String ERROR_MSG = "Error";
public static ResponseBean success() {
return ResponseBean.builder()
.code(SUCCESS_CODE)
.msg(SUCCESS_MSG)
.build();
}
public static ResponseBean success(Object data) {
return ResponseBean.builder()
.code(SUCCESS_CODE)
.msg(SUCCESS_MSG)
.data(data)
.build();
}
public static ResponseBean error() {
return ResponseBean.builder()
.code(ERROR_CODE)
.msg(ERROR_MSG)
.build();
}
public static ResponseBean error(int code, String msg) {
return ResponseBean.builder()
.code(code)
.msg(msg)
.build();
}
}
6. 简单接口编写
请求体类,放在 req 目录下,创建 IdReq.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdReq {
private String id;
}
响应体类,放在 resp 目录下,创建 UserInfoResp.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserInfoResp {
private String id;//用户id
private String name;//用户名称
private String birthday;//用户生日
private String gender;//用户性别
}
Controller 类,位于 controller 目录下,创建 UserController.java
@Slf4j
@RestController
@RequestMapping(value = "/user")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@CrossOrigin(origins = "*", methods = {RequestMethod.POST, RequestMethod.GET})
public class UserController {
private final UserService userService;
@PostMapping(value = "/query-user-info")
public ResponseBean queryUserInfo(@RequestBody @Validated IdReq req) {
return ResponseBean.success(userService.queryUserInfo(req));
}
}
Service 类,位于 service 目录下,创建 UserService.java
public interface UserService {
UserInfoResp queryUserInfo(IdReq req);
}
Service 实现类,位于 impl 目录下,创建 UserServiceImpl.java
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements UserService {
private final UserMapper userMapper;
@Override
public UserInfoResp queryUserInfo(IdReq req) {
User user = userMapper.selectByPrimaryKey(req.getId());
if (user == null) {
throw new CommonException(ExceptionEnum.NOT_FIND);
}
return UserInfoResp.builder()
.id(user.getId().toString())
.name(user.getName())
.birthday(user.getBirthday())
.gender(GenderEnum.getDescByType(user.getGender()))
.build();
}
}
一个根据 id 查询用户的简单方法就写完了,postman 测试正常
7. 常用的工具类位于 utils 目录下,这里我复制了些我常用的工具类
- CommonUtil ---------------------------------------- 通用工具类
- DateUtil ---------------------------------------------- 时间工具类
- EnumUtil -------------------------------------------- 枚举工具类
- PageHelperUtil ------------------------------------ 分页工具类
- PureNetUtil ----------------------------------------- 网络访问工具类
- StringTool ------------------------------------------- 字符串工具类
以下是我搭建这个基础 SpringBoot 项目的网盘下载链接:
链接:百度网盘
提取码:w7yo
Java相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile



