zoukankan      html  css  js  c++  java
  • spring boot中使用mybatis逆向工程

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

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

    首先导入所需要的依赖:

    <!-- mybatis逆向工程-->
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.5</version>
            </dependency>
            <!-- 数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!-- mysql jdbc-jar否则找不到驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.46</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.8</version>
            </dependency>

    我这里使用的是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">
    <generatorConfiguration>
        <!--加载资源文件-->
        <properties resource="generator.properties"></properties>
        <context id="testTables" targetRuntime="MyBatis3">
            <commentGenerator>
                <!--是否去除自动生成的注释 true是:false 否-->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库连接-->
            <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.userId}" password="${jdbc.pwd}"></jdbcConnection>
            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!--targetPackage目标包,生成实体类的位置-->
            <javaModelGenerator targetPackage="com.sunsas.mymusic.base.entity" targetProject="src/main/java">
                <!--enableSubPackages,是否让schema作为包的后缀-->
                <property name="enableSubPackages" value="false"/>
                <!--从数据库返回的值被清除前后空格-->
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!--targetProject:mapper映射文件生成的位置-->
            <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
                <property name="enableSubPackages" value="false"></property>
    
            </sqlMapGenerator>
            <!--targetPackage:mapper接口生成的位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.sunsas.mymusic.base.dao" targetProject="src/main/java">
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
            <!--指定数据库表,要和数据库中进行对应,否则将会出错 ,如果想生成全部表,tableName设为% -->
            <table tableName="music"  domainObjectName="Music"
                   enableCountByExample="false" enableUpdateByExample="false"
                   enableDeleteByExample="false" enableSelectByExample="false"
                   selectByExampleQueryId="false"></table>
            <table tableName="singer"  domainObjectName="Singer"
                   enableCountByExample="false" enableUpdateByExample="false"
                   enableDeleteByExample="false" enableSelectByExample="false"
                   selectByExampleQueryId="false"></table>
        </context>
    </generatorConfiguration>

    注释已经写得很明白了,注意对应的路径不要配错就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<String> warnings=new ArrayList<String>();
            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加上配置:

    <!--可以自定义生成model的代码注释-->
            <commentGenerator type="com.sunsas.mall.mbg.CommentGenerator">
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true"/>
                <property name="suppressDate" value="true"/>
                <property name="addRemarkComments" value="true"/>
            </commentGenerator>

    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(" */");
        }
    
    }
  • 相关阅读:
    js压缩图片上传插件localResizeIMG
    valueOf函数详解
    垂直居中
    word-wrap,word-break,white-space
    理解bind函数
    float失效的情况
    塞码考试系统里的输入,到底是怎么回事
    理解position:relative
    border实现三角形的原理
    函数是对象,函数名是指针
  • 原文地址:https://www.cnblogs.com/SunSAS/p/12599149.html
Copyright © 2011-2022 走看看