作者:admin,发布日期:2021-03-21
阅读:2180;评论: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 在映射的时候,不会映射这个字段,这就导致在调用到该字段的时候由于没有映射,取不到而报空指针异常。 当您遇到类似的情况,请针对该属性进行相关配置以解决以上问题。
![[商家推荐] AkkoCloud - 国内大带宽NAT | 我的世界面板服务器 | 全新美国圣何塞GIA季度特惠套餐已上线](https://blog.craftyun.cn/zb_users/upload/2020/02/202002081581165951411715.png) 
								 
								![[Vue3] Vite中使用cdn来加载需要的库文件](https://blog.craftyun.cn/zb_users/upload/2021/02/202102061612623404747437.jpg) 
								![[教程] 使用组策略关闭Windows defender之后Windows Defender Antivirus Service还占用内存的解决方案](https://blog.craftyun.cn/zb_users/upload/2019/06/201906121560336426769922.png) 
								![[技巧]腾讯云服务器自助更换IP教程(无需任何费用)](https://blog.craftyun.cn/zb_users/upload/2017/11/201711281511834748513907.png)