spring boot中使用mybatis逆向工程


现在人懒得写dao,mapper,mapper.xml,所以有了逆向工程,只要根据数据库的表就给你生成对应的文件,十分方便。

当然,对于mapper肯定方法还是不够的,需要自己添加。

首先导入所需要的依赖:


        
            org.mybatis.generator
            mybatis-generator-core
            1.3.5
        
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
            5.1.46
            runtime
        
        
            org.projectlombok
            lombok
            1.18.8
        

我这里使用的是druid数据源,所以引入了对应的依赖,和mysql驱动。

还引入了lombok,这个需要安装插件,节省代码,方便开发,这些和逆向工程没关系的。

 核心就是这几个文件,当然最核心的是generatorConfig.xml文件,其余的可以没有。比如GeneratorUtil是使用java代码来生成,但你也可以使用插件去生成。

generator.properties配的属性只是给generatorConfig.xml使用的,你可以不要这个配置文件,在generatorConfig.xml直接写死。

generator.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/music
jdbc.userId=root
jdbc.pwd=123456

数据库连接属性自己更改。

generatorConfig.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">

    
    
    
        
            
            
        
        
        
        
        
            
        
        
        
            
            
            
            
        
        
        
            

        
        
        
            
        
        
        
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">

注释已经写得很明白了,注意对应的路径不要配错就ok。

GeneratorUtil:

package com.sunsas.mymusic.base;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class GeneratorUtil {
    public void testGenerator() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        List warnings=new ArrayList();
        boolean overWriter=true;
        //指向配置文件  
        File configFile=new File(GeneratorUtil.class.getResource("/setting/generatorConfig.xml").getFile());
        ConfigurationParser cp=new ConfigurationParser(warnings);
        Configuration config=cp.parseConfiguration(configFile);
        DefaultShellCallback callback=new DefaultShellCallback(overWriter);
        MyBatisGenerator myBatisGenerator=new MyBatisGenerator(config,callback,warnings);
        myBatisGenerator.generate(null);
    }

    public static void main(String[] args)throws Exception {
        GeneratorUtil generatorTest=new GeneratorUtil();
        generatorTest.testGenerator();
    }
}

这个就是执行java代码来逆向生成。关于插件的逆向生成就懒得说了,每次都要修改参数,有些麻烦。

运行就ok了。

如果想让生成的实体类具有注释。可以在generatorConfig.xml加上配置:


        "com.sunsas.mall.mbg.CommentGenerator">
            
            "suppressAllComments" value="true"/>
            "suppressDate" value="true"/>
            "addRemarkComments" value="true"/>
        

CommentGenerator:

package com.sunsas.mall.mbg;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

import java.util.Properties;

/**
 * 自定义注释生成器
 * Created by macro on 2018/4/26.
 */
public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments = false;

    /**
     * 设置用户配置的参数
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    /**
     * 给字段添加注释
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        //根据参数和备注信息判断是否添加备注信息
        if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
            addFieldJavaDoc(field, remarks);
        }
    }

    /**
     * 给model的字段添加注释
     */
    private void addFieldJavaDoc(Field field, String remarks) {
        //文档注释开始
        field.addJavaDocLine("/**");
        //获取数据库字段的备注信息
        String[] remarkLines = remarks.split(System.getProperty("line.separator"));
        for (String remarkLine : remarkLines) {
            field.addJavaDocLine(" * " + remarkLine);
        }
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }

}