前言
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 |
自动适配 |
pom文件如下:
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> </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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.4.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency>
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>runtime</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
|
配置文件
在项目的resource文件夹下新建application.yml文件,并在其中添加如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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
mybatis-plus: mapper-locations: - "classpath*:mappers/**/*.xml" - "classpath*:your/project/path/mappers/xml/**/*.xml"
|
添加扫描注解
在主启动文件中添加扫描注解‘@MapperScan’,主启动文件如下:
1 2 3 4 5 6 7
| @SpringBootApplication @MapperScan("com.qiuli.mybatis.mappers") 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.mybatis.mappers") public class MyBatisPlusConfig {
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }
@Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } }
|
添加测试
做完了上面的几步,springboot+mybatis-plus的基础框架就搭建好了,我们现在要添加一些测试,来验证搭建的是否正确
- 登录到前面新建的‘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 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; }
|
- 新建sql接口,注意:接口的目录要和扫描注解中的一致
1 2 3 4 5 6 7 8 9
| public interface UserMapper {
boolean changeUserName(User user); }
|
- 新建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>
|
- 在项目的‘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"); } }
|
添加热部署
我们在调试时如果总是重启项目,会浪费很多时间,所以我们为项目引入热部署,修改逻辑代码后,只需要使用快捷键‘Ctrl+F9’就可以重新加载逻辑代码
首先,在项目的pom.xml文件中添加spring-boot-devtools依赖和``。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>runtime</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
|
配置IDEA设置
接下来,需要在IntelliJ IDEA中进行两项关键设置,以启用自动编译。
- 开启自动编译:依次进入
File-> Settings-> Build, Execution, Deployment-> Compiler,勾选 **Build project automatically**。
- 注册表配置:在IDEA中按下快捷键
Ctrl + Shift + Alt + /(Mac下为 Command + Shift + Option + /),选择 **Registry…**。在弹出的窗口中,找到并勾选 compiler.automake.allow.when.app.running 选项。
可选应用配置
还可以在application.yml或application.properties配置文件中调整Devtools的行为,例如指定只监控src/main/java目录的变动,并排除某些资源。
1 2 3 4 5 6 7 8
| spring: devtools: restart: enabled: true additional-paths: src/main/java exclude: WEB-INF/**, static/** freemarker: cache: false
|
注意事项
工作原理:Devtools通过使用两个独立的类加载器(ClassLoader)来实现快速重启。一个加载器加载几乎不会改变的第三方库,另一个(称为restart ClassLoader)加载你正在开发的代码。当检测到代码变更时,只会丢弃并重启第二个加载器,从而大大缩短了重启时间。
生效范围:默认情况下,修改Java类、配置文件等会触发应用重启。而修改静态资源(如static和templates目录下的文件)通常只会触发浏览器端的热加载,不会重启整个应用。
重要提示:热启动功能仅推荐在开发环境使用。在生产环境部署时,务必移除spring-boot-devtools依赖或将其enabled属性设置为false。
到这里为止,我们的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 {
public static void main(String[] args) throws Exception { AutoGenerator mpg = new AutoGenerator();
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("D:\\Data\\IntelliJIDEAWorkSpaces\\mybatis-plus-demo" + "/src/main/java");
gc.setAuthor("qiuli"); gc.setOpen(false); gc.setFileOverride(false); gc.setServiceName("%sService"); gc.setIdType(IdType.ID_WORKER_STR); gc.setDateType(DateType.ONLY_DATE); gc.setSwagger2(false);
mpg.setGlobalConfig(gc);
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);
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);
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);
strategy.setRestControllerStyle(true); strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
mpg.execute(); } }
|
这个类的注释还是比较清晰的,对应修改为自己的输出位置、数据源、包名称,直接运行就可以得到代码了
- 注意:mybatis-plus代码生成器生成的xml文件默认是在‘/src/main/java/**/mapper/xml’目录下,而不是在我们构建mybatis项目时习惯放置的‘/src/main/resource’目录下;而Maven在打包时会忽略‘/src/main/java’目录下的xml文件,所以我们要想让项目正常运行,我们需要修改两项配置
- 在项目(如果有子项目则在子项目中添加)的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"
|