MyBatis-plus自动生产

目录

简介

代码结构

Mapper

Service

ServiceImpl

编写模板

模板的入参

配置类

yml读取配置

代码生成器


简介

Mybatis-plus是在Mybatis上新增了一些工具,只有增加没有修改,导入Mybatis-plus的包,原来的代码不受影响。使用新的写法可以去享受新的工具带来的福利。以下代码省略部分import。

代码结构

主要在以下几个地方有些变化

Mapper

package zs.mapper;

import zs.entity.Food;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * 

* 食品表 Mapper 接口 *

* * @author 张烁 * @since 2019-11-26 */ public interface FoodMapper extends BaseMapper { }

Service

package zs.service;

import zs.entity.Food;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 

* 食品表 服务类 *

* * @author 张烁 * @since 2019-11-26 */ public interface IFoodService extends IService { }

ServiceImpl

package zs.service.impl;

import zs.entity.Food;
import zs.mapper.FoodMapper;
import zs.service.IFoodService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * 

* 食品表 服务实现类 *

* * @author 张烁 * @since 2019-11-26 */ @Service public class FoodServiceImpl extends ServiceImpl implements IFoodService { }

编写模板

MyBatis-plus自动生产_第1张图片

包的这个位置有默认的模板,举个例子

package ${package.Mapper};

import ${package.Entity}.${entity};
import ${superMapperClassPackage};

/**
* ${table.comment!} Mapper 接口
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
    interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
    public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {

    }

模板的入参

MyBatis-plus自动生产_第2张图片

${}里不是自己传进去的map,查看源码

里面封装了几个模板的实现,我用的是Freemarker,入参是他们父类AbstractTemplateEngine里的getObjectMap(TableInfo tableInfo)方法整理的,key值里面写死了,需要的话想办法重写。

配置类

yml读取配置

我把里面的参数提出来,为了以后更方便的配置,所以去Springboot的源码里把它读取yml的部分拿出来根据我自己的需求改写。

import cn.hutool.json.JSONObject;
import org.springframework.boot.env.YamlPropertySourceLoader;


/**
 * 读取yml文件的工具类
 * @author 张烁
 */
public class YmlReaderUtil {

    private static MapPropertySource mpropertySource;

    static {
        //加载springboot的yaml解析器
        YamlPropertySourceLoader yamlPropertySourceLoader = new YamlPropertySourceLoader();
        //配置源
        Resource resource = new AbstractResource() {
            @Override
            public String getDescription() {
                return "";
            }

            /**
             * 拼接输入流
             */
            @Override
            public InputStream getInputStream() throws IOException {
                String projectPath = System.getProperty("user.dir");
                return new FileInputStream(projectPath + "/src/main/resources/config/" + "codeGenerator.yml");
            }
        };

        List> propertySourceList = new ArrayList<>();
        try {
            propertySourceList = yamlPropertySourceLoader.load("codeGenerator.yml", resource);
        } catch (IOException e) {
            System.err.println("读取失败");
            e.printStackTrace();
        }
        mpropertySource=(MapPropertySource)propertySourceList.get(0);
    }


    public static JSONObject getMap(){
        JSONObject json=JSONUtil.parseObj(mpropertySource.getSource());
        return json;
    }
}

输出的就是yml的json格式

代码生成器

调用上面的工具


import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.generator.AutoGenerator;

public class CodeGenerator {

    /**
     * 表名
     */
    private static final String table = YmlReaderUtil.getMap().getStr("tableName");

    public static void main(String[] args) {

        JSONObject json = YmlReaderUtil.getMap();

        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + json.getStr("outputDir"));
        gc.setAuthor(json.getStr("author"));
        gc.setOpen(false);
        // gc.setSwagger2(true); 实体属性 Swagger2 注解
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(json.getStr("datasource.url"));
        dsc.setDriverName(json.getStr("datasource.driver-class-name"));
        dsc.setUsername(json.getStr("datasource.username"));
        dsc.setPassword(json.getStr("datasource.password").substring(1));
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent(json.getStr("parent"));
        mpg.setPackageInfo(pc);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();

        // 配置自定义输出模板
        templateConfig.setService(json.getStr("ftl.service"));
        templateConfig.setController(json.getStr("ftl.controller"));
        templateConfig.setServiceImpl(json.getStr("ftl.serviceImpl"));
        templateConfig.setMapper(json.getStr("ftl.mapperJava"));
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        //自定义包名
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent(json.getStr("parent"));
        mpg.setPackageInfo(packageConfig);

        InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {
            }
        };
        injectionConfig.initMap();
        mpg.setCfg(injectionConfig);


        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setEntityTableFieldAnnotationEnable(false);
        // 写于父类中的公共字段
        strategy.setInclude(table);
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

 

你可能感兴趣的:(工具包与第三方)