作者:admin,发布日期:2021-03-21
阅读:1646;评论:0
什么是AutoGenerator
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
在SpringBoot中AutoGenerator
首先需要安装mybaits-plus,作为数据库访问基础,在pom.xml中加入以下内容
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency>
安装完成后,就可以开始安装mybaits-plus代码生成器,安装的同时需要安装模板引擎(AutoGenerator默认使用的是velocity模板引擎)
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency>
接着创建生成器类,为其添加main方法便于我们运行
此文件为我自己编写好的代码,自己编写时可以参考官网的代码进行自定义。
https://mp.baomidou.com/guide/generator.html
package com.example.demo.generator; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.*; public class CodeGenerator { public static void main(String[] args) { // 创建AutoGenerator AutoGenerator generator = new AutoGenerator(); // 创建全局配置实体 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); // 输出目录 globalConfig.setOpen(false); // 生成后是否打开目录 globalConfig.setAuthor("FanHuaCloud"); // 设置作者,将会显示在生成的类注释中 globalConfig.setFileOverride(false); // 设置是否覆盖原有文件 generator.setGlobalConfig(globalConfig); // 将设置应用到generator上 // 创建数据源配置实体,用于自动生成实体类 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl(""); // 设置数据源url dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); // 设置数据库驱动 dataSourceConfig.setUsername(""); // 设置用户名 dataSourceConfig.setPassword(""); // 设置密码 generator.setDataSource(dataSourceConfig); // 将设置应用到generator上 // 创建数据表策略实体 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setInclude("emp"); // 设置需要生成的表,与exclude二选一配置 strategyConfig.setEntityLombokModel(true); // 设置实体类是否使用lombok strategyConfig.setEntitySerialVersionUID(false); // 设置实体类是否添加SerialVersionUID strategyConfig.setNaming(NamingStrategy.underline_to_camel); generator.setStrategy(strategyConfig); // 将设置应用到generator上 // 包配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.example.demo");// 设置父包名 generator.setPackageInfo(packageConfig);// 将设置应用到generator上 // 模板设置 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.disable(TemplateType.CONTROLLER, TemplateType.XML); // 不生成指定的模板 generator.setTemplate(templateConfig); // 将设置应用到generator上 // 开始生成 generator.execute(); } }
运行测试
运行后即可发现程序已经按照我们的代码生成了正确的文件,我们可以使用junit来测试一下mybaits-plus内置方法
package com.example.demo; import com.example.demo.entity.Emp; import com.example.demo.service.IEmpService; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import java.util.List; @Slf4j @SpringBootTest class DemoApplicationTests { @Resource private IEmpService empService; @Test public void testEmpSelect() { List<Emp> list = empService.list(); log.info(String.valueOf(list)); } }
关于mapper文件的位置
当使用生成器创建mapper的xml文件时,默认此文件会被创建在mapper/xml下面,而此目录中的文件在maven打包时不会将其打包进去(不过eclipse貌似会打包进去),这就导致实际使用中无法加载mapper.xml。
解决方法就是在resources中创建mapper文件夹,然后把所有的xml文件复制到里面,这样就可以正常加载了。
默认的mapper.xml目录可以在MybatisPlusProperties中找到
private String[] mapperLocations = new String[]{"classpath*:/mapper/**/*.xml"};
当然我们也可以在配置中对其进行设置:
mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml
关于mybaits xml中配置的sql返回的map字段不全的问题
在配置中开启call-setters-on-nulls来解决这个问题
mybatis-plus: configuration: call-setters-on-nulls: true
指定当结果集中值为 null 的时候是否调用映射对象的 Setter(Map 对象时为 put)方法,通常运用于有 Map.keySet() 依赖或 null 值初始化的情况。
通俗的讲,即 MyBatis 在使用 resultMap 来映射查询结果中的列,如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段,这就导致在调用到该字段的时候由于没有映射,取不到而报空指针异常。 当您遇到类似的情况,请针对该属性进行相关配置以解决以上问题。