0%

搭建springboot+mybatis-plus项目

前言

springboot+mybatis-plus应该是现在java程序员最常用的框架,这里重新总结一下。

搭建springboot+mybatis-plus项目

新建数据库

登录到mysql数据库,新建数据库‘mybatis-plus-demo’

新建工程

新建一个mybatis-plus-demo项目,我用的Maven构建

依赖版本

在pom文件中添加如下依赖

springboot ‘2.5.6’

mybatis-plus ‘3.0.5’

mysql-connector-j ‘8.4.0’

lombok ‘自动适配’

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
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!-- mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
</dependency>

<!-- lombok工具包 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

配置文件

在项目的resource文件夹下新建application.yml文件,并在其中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server:
port: 18888

spring:
application:
name: mybatis-plus-demo
datasource:
username: username
password: password
url: jdbc:mysql://ip:port/mybatis-plus-demo?useUnicode=true
driver-class-name: com.mysql.cj.jdbc.Driver

# ‘mapper-locations’配置的是xml文件的位置
mybatis-plus:
mapper-locations:
# 这里配置的是‘resource/mappers’目录下的所有xml文件
- "classpath*:mappers/**/*.xml"

添加扫描注解

在主启动文件中添加注解‘@MapperScan’,主启动文件如下:

1
2
3
4
5
6
7
@SpringBootApplication
@MapperScan("com.qiuli.mybatis.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

这个注解告诉mybatis-plus框架我们的sql接口在哪个文件夹下,当然我们也可以新建一个专门的mybatis-plus配置文件,在里面添加扫描注解并添加一些插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Configuration
@MapperScan("com.qiuli.stock.mapper")
public class MyBatisConfig {
/**
* 分页插件
*
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* mybatis-plus 逻辑删除插件
*
* @return
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}

添加测试

做完了上面的几步,springboot+mybatis-plus的基础框架就搭建好了,我们现在要添加一些测试,来验证搭建的是否正确

  1. 登录到前面新建的‘mybatis-plus-demo’数据库,初始化数据库表,初始化文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#新建测试表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
id BIGINT NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);

###########################################################################################

# 插入测试数据
DELETE FROM `user`;
INSERT INTO `user` (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
  1. 新建实体类
1
2
3
4
5
6
7
8
9
@Data
@TableName(value = "user")
@Accessors(chain = true)
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}
  1. 新建sql接口,注意:接口的目录要和扫描注解中的一致
1
2
3
4
5
6
7
8
9
public interface UserMapper {
/**
* 修改名称
*
* @param user
* @return
*/
boolean changeUserName(User user);
}
  1. 新建xml文件,注意:xml文件的目录要和项目配置文件中的mapper-locations项相吻合
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qiuli.mybatis.mapper.UserMapper">
<update id="changeUserName" parameterType="com.qiuli.mybatis.domain.User">
UPDATE `user`
SET `user`.`name` = #{name}
WHERE `user`.id = #{id}
</update>
</mapper>
  1. 在项目的‘src/test’目录中新建单元测试文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@SpringBootTest
public class UserMapperTest {
@Resource
private UserMapper userMapper;

@Test
public void testSelect() {
List<User> users = userMapper.selectList(null);
Assert.isTrue(5 == users.size(), "success");
users.forEach(System.out::println);
}

@Test
public void testChangeUserName() {
User user = new User().setId(1).setName("zhangsan");

boolean flag = userMapper.changeUserName(user);
Assert.isTrue(flag, "success");
}
}

到这里为止,如果单元测试成功,我们的springboot+mybatis-plus框架就算搭建完成了

使用代码生成器生成骨架代码

我们完成了springboot+mybatis-plus项目搭建,而mybatis-plus为我们提供了强大的扩展功能,这里简单介绍一下mybatis-plus的代码生成器,可以查看教程:https://baomidou.com/guides/new-code-generator/

需要说明的是,代码生成器对于版本有要求,代码生成器的版本和引擎的版本需要适配,我使用不同的版本,有时运行代码生成器时直接报错,有时生成的代码运行报错,所以代码生成器的版本和引擎的版本不要轻易改动

引入依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- mybatis代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.0.5</version>
</dependency>
<!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>

在测试目录下新建java类‘CodeGenerator’,代码内容如下:

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class CodeGenerator {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();

// 2、全局配置
GlobalConfig gc = new GlobalConfig();
// 生成的代码输出到哪个目录,尽量写绝对路径
// String projectPath = System.getProperty("user.dir");
// gc.setOutputDir(projectPath + "/src/main/java");
gc.setOutputDir("D:\\Data\\IntelliJIDEAWorkSpaces\\mybatis-plus-demo" + "/src/main/java");

gc.setAuthor("qiuli"); //作者
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER_STR); //主键策略
gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
gc.setSwagger2(false);//开启Swagger2模式

mpg.setGlobalConfig(gc);

// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://139.155.229.99:3306/mybatis-plus-demo?useUnicode=true&characterEncoding=UTF-8" +
"&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("username");
dsc.setPassword("password");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);

// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(""); //子模块名,如果包直接在根项目下配置为空
pc.setParent("com.qiuli.mybatis");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);

// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
// 表的名称
strategy.setInclude("staff");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

mpg.setStrategy(strategy);


// 6、执行
mpg.execute();
}
}

这个类的注释还是比较清晰的,对应修改为自己的输出位置、数据源、包名称,直接运行就可以得到代码了

  • 注意:mybatis-plus代码生成器生成的xml文件默认是在‘/src/main/java/**/mapper/xml’目录下,而不是在我们构建mybatis项目时习惯放置的‘/src/main/resource’目录下;而Maven在打包时会忽略‘/src/main/java’目录下的xml文件,所以我们要想让项目正常运行,我们需要修改两项配置
    1. 在项目(如果有子项目则在子项目中添加)的pom文件中添加配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>

​ 这些配置是告诉Maven资源的位置,即‘src/main/java’目录下的xml文件也需要打包

​ 2. 我们需要修改application.yml文件中的‘mybatis-plus.mapper-locations’的配置为现在xml文件所在的位置

1
2
3
mybatis-plus:
mapper-locations:
- "classpath:com/qiuli/mybatis/mapper/xml/*.xml"