风萧萧兮易水寒

Mybatis-plus之自动生成

1. 前言

本文章首次是在csdn上写的,本次发布到自己的博客中,增添一点色彩。

点击查看Mybatis-plus官方文档

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2. 创建spring boot 项目

使用idea默认生成即可 …

3. 修改pom文件

        
            org.springframework.boot
            spring-boot-starter
        
        
           org.springframework.boot
           spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.projectlombok
            lombok
            true
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.1.0
        
        
        
            com.baomidou
            mybatis-plus-generator
            3.1.0
        

        
        
            org.apache.velocity
            velocity-engine-core
            2.0
        

        
            mysql
            mysql-connector-java
            runtime
        

        
        
            org.projectlombok
            lombok
            1.16.16
        

        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
        
            io.springfox
            springfox-swagger2
            2.9.2
        

        
            io.springfox
            springfox-swagger-ui
            2.9.2
        

4. 修改application.yml文件

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: admin
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapperLocations: classpath*:mapper/*.xml
  typeAliasesPackage: com.mybatis.plus.demo.model # mybatis 别名包扫描路径
  global-config:
    db-config:
      logic-delete-value: 1 #逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #线上关闭sql日志打印

5. 修改启动类

启动类

6. 创建Mybatis-plus配置

新建文件MyBatisPlusConfiguration

注意 : 如果使用mp自带的控制逻辑删除和控制版本号还有分页功能,则需要添加这个配置

package com.plus.demo.util;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;

@Configuration
public class MyBatisPlusConfiguration {
    /**
     * 控制逻辑删除
     * @return
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    };
    /**
     * 控制版本号
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    };

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    };
};

7. 编写自动生成工具类

注 : 直接把Controller/service/serviceImpl/dao/mapper/form/vo全部生成

此处使用默认velocity 模版引擎 则没有常用的crud方法,使用自己的模板则可以生成常用的crud方法

其中自定义模板中有工具类是公司自己的jar包,所以只推荐参考

拷贝mybatis-plus-generator jar包中的模板到自己项目resources

package com.mybatis.plus.demo.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 代码生成器
 *
 */
public class MabatisPlusGenerator {
    private static String path = "E:\\idea\\springboot-mybatis-plus"; //文件路径
    private static String table = "tm_user"; //table名字
    public static void main(String[] args) {
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(false) // 是否支持AR模式
            .setAuthor("GMaya") // 作者
            .setSwagger2(true) // 使用Swagger
            .setOutputDir(path + "/src/main/java") // 生成路径
            .setFileOverride(true) // 文件覆盖
            .setIdType(IdType.AUTO) // 主键策略
            // 自定义文件命名,注意 %s 会自动填充表实体属性!
            .setServiceName("%sService").setServiceImplName("%sServiceImpl")
            .setControllerName("%sController").setMapperName("%sDao").setXmlName("%sMapper")
            .setOpen(false) // 生成文件后 不打开文件夹
            .setBaseResultMap(true) // XML ResultMap
            .setBaseColumnList(true); // XML columList

        //2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
            .setDriverName("com.mysql.jdbc.Driver")
            .setUrl(
                "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8")
            .setUsername("root").setPassword("admin").setTypeConvert(new MySqlTypeConvert() {
                @Override
                public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                    if (fieldType.toLowerCase().contains("tinyint")) {
                        return DbColumnType.BOOLEAN;
                    };
                    //将数据库中datetime转换成date
                    if (fieldType.toLowerCase().contains("datetime")) {
                        return DbColumnType.DATE;
                    };
                    return super.processTypeConvert(globalConfig, fieldType);
                };
            };);

        //3. 策略配置
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setColumnNaming(NamingStrategy.underline_to_camel)
            .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
            .setEntityLombokModel(true) // 使用Lombok
            .setVersionFieldName("version") // 数据库版本控制字段
            .setLogicDeleteFieldName("status") // 数据库逻辑删除字段
            .setRestControllerStyle(true)
            .setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService")
            .setInclude(new String[]{table};); // 生成的表

        //4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("com.mybatis.plus.demo").setMapper("dao").setService("service")
            .setServiceImpl("service.impl").setController("controller").setEntity("model");
        //5.自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            };
        };;
        String templatePath = "/templates/mapper.xml.vm"; // 如果模板引擎是 velocity
        List<FileOutConfig> focList = new ArrayList<>(); // 自定义输出配置
        focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // mapper自定义输出文件名
                return path + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"
                       + StringPool.DOT_XML;
            };
        };);
        // ------------form vo 使用默认模板请注释-begin-----------
        templatePath = "/templates/entityForm.java.vm";
        focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // form自定义输出文件名
                return path + "/src/main/java/com/mybatis/plus/demo/pojo/" + tableInfo.getEntityName() + "Form"
                       + StringPool.DOT_JAVA;
            };
        };);
        templatePath = "/templates/entityVO.java.vm";
        focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // VO自定义输出文件名
                return path + "/src/main/java/com/mybatis/plus/demo/pojo/" + tableInfo.getEntityName() + "VO"
                       + StringPool.DOT_JAVA;
            };
        };);
        // ------------form vo 使用默认模板请注释-end-----------
        cfg.setFileOutConfigList(focList);

        // 6 配置模板 自定义模板/在resources/templates 可以编辑
        TemplateConfig templateConfig = new TemplateConfig();
        // 关闭默认 xml 生成,调整生成 至 根目录
        templateConfig.setEntity("/templates/entity.java").setService("/templates/service.java")
            .setController("/templates/controller.java").setMapper("/templates/mapper.java")
            .setServiceImpl("/templates/serviceImpl.java").setXml(null);

        //7. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config).setDataSource(dsConfig).setStrategy(stConfig).setCfg(cfg)
            .setPackageInfo(pkConfig).setTemplate(templateConfig);

        //8. 执行
        ag.execute();
    };
};

注 : 如果是使用自定义模板,请注意修改模板中的form,vo引入包路径等

使用默认模板请注释代码中生成form/vo代码

第一次运行可能有以下错误,如果没有请忽略

问题1 : The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents

解决 : set global time_zone=’+8:00’

问题2 : 使用Lombok插件,Idea,Eclipse必须安装改插件,否则找不到get/set方法

解决 : IDEA安装Lombok步骤

安装Lombok1
安装Lombok2
Eclipse的自行百度 /滑稽

修改文件路径表名之后运行

生成结构图如下

结构图
perfect ! ! !

坚持原创技术分享,您的支持将鼓励我继续创作!