有了前面的铺垫,我们能看懂mybatis和springboot工程整合之后各个文件都有什么用处了。但是每次都要写实体类、Mapper接口、Mapper XML,在web项目中还要写Service层和Controller层,大部分都是重复性的工作,现在就使用mybatis-plus快速生成这些重复性的代码吧!
代码生成
安装mybatis-plus-generator
因为mybatis-plus从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,所以,我们需要需要手动添加代码生成器依赖和模板引擎依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.0</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version></dependency>
编写配置
现在我们告诉mybatis-plus如何生成代码吧!
import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.rules.DateType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;public class CodeGenerator {public static void main(String[] args) {AutoGenerator autoGenerator = new AutoGenerator();//全局配置GlobalConfig globalConfig = new GlobalConfig();String projectPath = System.getProperty("user.dir");globalConfig.setOutputDir(projectPath+"/src/main/java");globalConfig.setAuthor("zhanghaopai");globalConfig.setOpen(false);globalConfig.setServiceName("%sService");globalConfig.setDateType(DateType.ONLY_DATE);autoGenerator.setGlobalConfig(globalConfig);//设置数据源DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/blog?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("AaA19980818");dataSourceConfig.setDbType(DbType.MYSQL);autoGenerator.setDataSource(dataSourceConfig);//包设置PackageConfig pc = new PackageConfig();// pc.setModuleName("generator");pc.setParent("com.zhp.generator");pc.setEntity("entity");pc.setMapper("mapper");pc.setService("service");pc.setController("controller");autoGenerator.setPackageInfo(pc);//策略配置StrategyConfig strategy = new StrategyConfig();strategy.setInclude("t_blog","t_blog_tags","t_comment","t_tag","t_type","t_user"); // 设置要映射的表名strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true); // 自动lombokstrategy.setRestControllerStyle(true);autoGenerator.setStrategy(strategy);autoGenerator.execute();//执行代码自动生成}}
可以看到一共有四处设置,分别是全局设置、设置数据源、生成包设置、生成策略配置。
这其中还需要到了一些依赖,比如设置数据源需要用到mysql依赖,策略配置中使用了lombok,所以也需要添加lombok依赖,依赖如下:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency>
点击运行CodeGenerator主程序,即可生成相关代码。
运行结果如下:
运行准备
现在只是将代码生成出来了,想要运行起来还有一些步骤需要进行。
添加mybatis-plus核心依赖
我们刚才只是添加了mybatis-plus的generator依赖,现在我们需要添加mybatis-plus运行时的核心依赖。
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency>
配置mapper地址和实体类包地址
我们需要在springboot的配置中说明刚刚生成的mapper地址和实体类的地址,这样mybatis-plus才能将从数据库中查询的数据转换成实体类。
在springboot的application.yml核心配置中填写如下的配置:
mybatis-plus:mapper-locations: classpath:/com/zhp/generator/mapper/xml/*.xmltype-aliases-package: com.zhp.generator.entity
我们还需要配置数据库的连接信息
spring:datasource:url: jdbc:mysql://localhost:3306/blogusername: rootpassword: AaA19980818driver-class-name: com.mysql.jdbc.Driver
配置包扫描
现在springboot知道了Mapper XML的地址、实体类的包地址,现在我们要告诉springboot的Mapper地址,只需要在启动类上开启包扫描即可。
@SpringBootApplication@MapperScan("com.zhp.generator.mapper")public class GeneratorApplication {public static void main(String[] args) {SpringApplication.run(GeneratorApplication.class, args);}}
让maven项目将XML文件编译
点击运行之后,请打开生成的target目录,如果里面没有像我一样的xml文件,可能是你没有告诉编译系统需要将xml文件编译。
如果你有这样的问题,那么请在pom.xml文件的
<build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include><include>**/*.yml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include><include>**/*.yml</include></includes><filtering>true</filtering></resource></resources></build>
现在你告诉了编译系统src/main/resources文件夹下的properties、xml、yml文件需要编译,src/main/java文件夹下的properties、xml、yml文件也需要编译。
运行
我们采用web方式验证,在任意生成的controller中添加测试代码,测试代码有两项内容,①自动注入Service ②调用Service的方法访问数据库并返回,对于我的项目我是按照如下方式写的测试代码:
@RestController@RequestMapping("/tBlog")public class TBlogController {@Autowiredprivate TBlogService blogService;@GetMapping("/getBlogById")public TBlog getBlogById(){return blogService.getById(6);}}
运行并访问,结果如下:
