前言
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
mybatis-plus: mapper-locations: - "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 {
@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"); } }
|
到这里为止,如果单元测试成功,我们的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"
|