代码生成器:mybatis-gennerator

可以帮助生成数据库中的entity,mapper和xmlmapper代码,当数据库字段多的时候,这个非常的方便,同时修改字段也是,只需要执行下代码即可

 

使用该功能,需要导入两个依赖:

compile group: 'org.mybatis.generator', name: 'mybatis-generator-core', version: '1.3.7'
compile group: 'tk.mybatis', name: 'mapper', version: '4.1.5'

xml的配置文件:在test模块的resources包下:创建generator/codeGenerator.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
            <property name="caseSensitive" value="false"/>
        </plugin>

        <!--jdbc的连接信息-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/caraliu?serverTimezone=UTC"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <!--生成entity-->
        <javaModelGenerator targetPackage="cn.yishijie.code.entity" targetProject="%s/src/main/java"/>
        <!--生成xml文件-->
        <sqlMapGenerator targetPackage="cn.yishijie.mybatis.mapper"  targetProject="%s/src/main/resources"/>
        <!--生成mapper文件-->
        <javaClientGenerator targetPackage="cn.yishijie.code.mapper" targetProject="%s/src/main/java" type="MAPPER" />

        <!--需要生成代码的数据表-->
        <table tableName="animals" >
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

因为我这里是采用编码的方式产生,所以需要编码一部分:
 

package cn.yishijie.mybatis.mapper;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.*;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class CodeGenerator {

    private static Logger logger = LoggerFactory.getLogger(CodeGenerator.class);
    public static void main(String[] args) throws Exception{
        List<String> warnings = new ArrayList<>();
        ConfigurationParser cp = new ConfigurationParser(warnings);
        // 读取配置文件
        InputStream stream = CodeGenerator.class.getResourceAsStream("/generator/codeGenerator.xml");
        Configuration config = cp.parseConfiguration(stream);
        List<Context> contexts = config.getContexts();
        if(CollectionUtils.isEmpty(contexts)){
            logger.info("代码生成器的context为空!");
            return;
        }
        // 设置代码生成路径,modelOnly是否只生生成数据entity和xml
        if(!setCodePath(contexts, "false")){
            return;
        }
        // 支持覆盖原来生成的代码
        DefaultShellCallback callback = new DefaultShellCallback(Boolean.TRUE);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        // 出发生成代码的动作
        myBatisGenerator.generate(null);
        if(!warnings.isEmpty()){
            for (String warning : warnings) {
                logger.warn("代码生成警告信息:{}", warning);
            }
        }
    }

    public static boolean setCodePath(List<Context> contexts, String modelOnly){
        // 获取项目的根路径
        String contextPath = System.getProperty("user.dir");
        contextPath = contextPath.replace("\\", "/");
        Context context = contexts.get(0);
        JavaClientGeneratorConfiguration javaCli = context.getJavaClientGeneratorConfiguration();
        JavaModelGeneratorConfiguration javaModelGen = context.getJavaModelGeneratorConfiguration();
        SqlMapGeneratorConfiguration sqlMapGen= context.getSqlMapGeneratorConfiguration();
        javaCli.setTargetProject(String.format(javaCli.getTargetProject(), contextPath));
        sqlMapGen.setTargetProject(String.format(sqlMapGen.getTargetProject(), contextPath));
        javaModelGen.setTargetProject(String.format(javaModelGen.getTargetProject(), contextPath));

        List<TableConfiguration> tableConfigurations = context.getTableConfigurations();
        if(CollectionUtils.isEmpty(tableConfigurations)){
            logger.error("没有需要生成的数据表,请指定相应的数据表!");
            return Boolean.FALSE;
        }

        for (TableConfiguration tableConfiguration : tableConfigurations) {
            tableConfiguration.addProperty("modelOnly", modelOnly);
        }

        return Boolean.TRUE;
    }
}

上述需要注意的是:

1、如果第一次生成了文件,后续需要修改的时候,如果mapper文件有自定义的一些方法,如果直接执行会被覆盖,所以需要手工改下:modelOnly那个属性改为true;即可。这个时候会只修改entity和xml文件。即:setCodePath(contexts, "true")

2、这里编码的方式,扩展了下生成文件的路径,通过读取当前项目路径的方式,那么多人开发的时候,可以直接生成,而不用根据自己项目的绝对路径来每次修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值