从零开始SpringBoot项目搭建(一):使用IDEA创建新的SpringBoot项目以及进行MybatisPlus集成
一、使用IDEA进行快速创建SpringBoot项目
1.1 通过Maven快速创建新SpringBoot项目
有关Java和Maven等的环境搭建不过多赘述,直接开始操作。
打开IDEA,点击New Project
开始创建。
选择Maven
,选择自己的JDK
版本,点击Next
进入下一步
此时需要Name
处填写项目名称,在Location
处选择项目路径。需要注意的是:
- 最后路径名应该要和
Name
填写的相同,之后会在对应的路径下生成项目 GroupId
采用域名反写的书写形式,作为项目组织唯一的标识符,通常以com
或cn
开头,使用.
分割;ArtifactId
作为项目的唯一标识符,一般和项目名称相同
填写完成之后点击Finish
,此时新项目创建完成。
1.2 进行项目的Maven设置
点击File -> Setting...
,搜索Maven
,在上图所画的红框内选择事先配置好的Maven
Maven home path
为安装的Maven
根目录所在路径User setting file
为Maven
的配置文件settings.xml
所在路径Local repository
为Maven
本地仓库所在路径,引入的依赖包全部都存储在此仓库目录下,加入没有事先配置自己的Maven
本地仓库,可以使用默认仓库
设置好之后点击OK
,完成!
1.3 项目目录结构
项目的目录划分一般根据功能来划分包:
- 目录
src/main/java
下的包路径需要根据之前填写的ArtifactId
进行创建,反写的域名有几个逗号分隔符,就建几层包,只可多建不可少建。如上图所示我是多建了一个core
包,我会将此包作为扫描包的根路径,之后所有的核心代码都会放置在此路径下 - 启动类
DeployApplication
:自定义命名,启动类放置在扫描包的根路径下,他是项目的唯一入口 config
包:用于放置所有的配置类modular
包:核心业务代码,该包下所有代码按业务模块划分,每个业务模块进一步细分:controller
包:控制层,声明接口,主要用于接受前台传入的数据以及返回数据给前台dao
包:数据持久层,用于放置以Mapper
为结尾的接口文件和xml
文件(该类文件放置在dao
下的mapping
包中)model
包:用于定义数据模型,根据数据模型不同的用途分别放置在不同的包中:数据库表模型entity包
、用于请求的数据模型request包
、用于返回数据给前台的响应数据模型response包
、其他数据模型dto包
service
包:业务服务层,主要用于实现业务的核心逻辑enums
包:用于存放枚举类constant
包:用于存放常量
util
包:用于存放工具类resources
包:用于存放项目中需要用到的资源文件,像一些配置文件application.properties
或是一些静态资源文件
1.4 配置文件pom.xml
上述步骤中Maven
的settings.xml
文件是全局的配置文件,主要与Maven
的环境配置有关。而pom.xml
文件主要描述了项目的maven坐标
以及项目的依赖关系,还有一些开发者需要遵循的、自己定义的约束条件,是项目级别的配置文件。
初始pom.xml
文件,只需导入spring-boot-starter-web
依赖,就能实现初步的启动运行,默认端口8080
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
完整pom.xml
文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<packaging>jar</packaging>
<properties>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<testSource>${java.version}</testSource>
<testTarget>${java.version}</testTarget>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<version>3.1.0</version>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
</resource>
</resources>
</build>
</project>
- 这里我使用
parent
标签指定了父级坐标,之后所有导入的SpringBoot
相关依赖都无需在指定版本号。 - 指定打包方式,一般有
jar
和war
两种打包方式,这里指定为jar
打包方式 - 使用
properties
标签,将所有依赖的版本进行统一管理,更易维护 maven-compiler-plugin
插件,用来编译项目代码,是一个Maven
插件resouces
标签配置资源文件加载,会将src/main/java
文件夹下的所有.xml
文件以及resources
资源包下的所有.proerties
、.xml
、.yml
文件进行编译,加载到编译之后的classes
类路径下
完善配置文件pom.xml
后,保存代码,点击右侧侧边栏Maven
选项卡,点击重新载入依赖包按钮Reload All Maven Projects
,下载最新资源成功后,即可让最新pom.xml
配置文件发挥作用。
1.5 快速启动
在扫描包的根目录下创建启动类,如图在core
包下创建DeployApplication.java
文件,定义主函数入口:
@SpringBootApplication
public class DeployApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(DeployApplication.class).run(args);
}
}
之后启动项目,点击左侧绿色的箭头按钮,选第一个run
或者第二个debug
都可以运行,一般选择第二个,方便我们以后遇到问题之后进行调试,快速排查问题
启动成功!默认端口8080
,要想自定义端口号,在application.properties
文件中可以进行声明:server.port=[你的端口号]
在浏览器输入正确的地址http://localhost:8080
,如下图。
二、整合MybatisPlus
2.1 导入依赖
在pom.xml
配置文件下新增相关依赖
<properties>
<mybatis-plus-boot-starter.version>3.4.2</mybatis-plus-boot-starter.version>
</properties>
<dependencies>
<!--mysql数据库连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--MybatisPlus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
</dependencies>
2.2 配置数据源
在application.properties
文件中配置数据源
# 数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/firework_bbs_dev?serverTimezone=Asia/Shanghai
spring.datasource.username=[数据库登录用户名]
spring.datasource.password=[数据库登录密码]
配置文件有多种格式:
- 以
.properties
为后缀的配置文件,书写格式都是如上所示,xx属性.xx属性=具体值
- 以
.yml
为后缀的配置文件,书写格式则是xx属性: xx属性: 具体值
,如下所示
# 数据库连接
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/firework_bbs_dev?serverTimezone=Asia/Shanghai
username: [数据库登录用户名]
password: [数据库登录密码]
启动项目,可以看到mybatisplus
的启动UI。
2.3 测试
接下来,验证一下数据库是否真的连接成功了,导入junit
相关依赖方便进行单元测试,导入lombok
用于简化实体类的创建。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
2.3.1 数据库新建测试表
创建测试表tbl_demo
,创建表的sql语句
如下所示:
CREATE TABLE `tbl_demo` (
`id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键id',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '姓名',
`phone` varchar(25) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号',
`create_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人id',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人id',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`is_del` int NOT NULL DEFAULT '0' COMMENT '逻辑删除 0-否 1-是',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
表结构如下图所示:
2.3.2 根据数据库表结构定义数据模型
package com.study.core.modular.demo.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@Accessors(chain = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "tbl_demo")
public class Demo {
/**
* 主键id
*/
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 姓名
*/
@TableField(value = "`name`")
private String name;
/**
* 手机号
*/
@TableField(value = "phone")
private String phone;
/**
* 创建人id
*/
@TableField(value = "create_id")
private String createId;
/**
* 创建时间
*/
@TableField(value = "create_time")
private Date createTime;
/**
* 更新人id
*/
@TableField(value = "update_id")
private String updateId;
/**
* 更新时间
*/
@TableField(value = "update_time")
private Date updateTime;
/**
* 逻辑删除 0-否 1-是
*/
@TableField(value = "is_del")
@TableLogic
private Integer isDel;
}
2.3.3 声明mapper接口
声明的mapper
接口继承MybatisPlus
的BaseMapper
接口
package com.study.core.modular.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.study.core.modular.demo.model.entity.Demo;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DemoMapper extends BaseMapper<Demo> {
}
2.3.4 编写service层核心业务代码
package com.study.core.modular.demo.service;
import com.study.core.modular.demo.dao.DemoMapper;
import com.study.core.modular.demo.model.entity.Demo;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class DemoService {
private final DemoMapper demoMapper;
public Demo getDemoById(String id) {
return demoMapper.selectById(id);
}
}
2.3.5 单元测试
创建单元测试,调用service
层方法
import com.study.core.modular.demo.service.DemoService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoTest {
@Resource
private DemoService demoService;
@Test
public void getDemoTest() {
Demo demo = demoService.getDemoById("1");
System.out.println(demo);
}
}
控制台返回结果如下图所示,能看到正确打印出了demo数据,表示连接数据库以及整合MybatisPlus
成功。
以上是对SpringBoot项目的初始化,要想完成企业级开发,还需要做许多配置。
有兴趣的小伙伴可以继续阅读第二篇有关Swagger接口文档
以及MybatisPlus
的配置:从零开始SpringBoot项目搭建(二)