zoukankan      html  css  js  c++  java
  • MyBatis:Mybatis逆向工程问题记录

     1. 搭建逆向工程方法一

    近日我在搭建springboot+mybatis+mysql 的整合项目(自己测试玩)的时候用到了mybatis的逆向工程,来这里记录一下我的菜鸟编码过程

    首先我在maven中引入这些依赖

    <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.5</version>
    </dependency>
    <!-- mysql -->
    <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.44</version>
    </dependency>

    这里的org.mybatis.generator是mybatis的自动生成类的工具,我的是generator-1.3.5搭配mysql-5.1.44

    项目模块截图:

    在resources文件下创建一个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="application.properties"/>
    
        <!-- 一个数据库一个context -->
        <context id="MysqlContext">
            <!-- 注释 -->
            <commentGenerator >
                <property name="suppressAllComments" value="false"/><!-- 是否取消注释 -->
                <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
            </commentGenerator>
    
            <!-- jdbc连接 -->
            <jdbcConnection driverClass="${spring.datasource.driver-class-name}"
                            connectionURL="${spring.datasource.url}" userId="${spring.datasource.username}"
                            password="${spring.datasource.password}" />
    
            <!-- 类型转换 -->
            <javaTypeResolver>
                <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!-- 生成实体类地址 targetPackage是指定生成的路径 targetProject是项目的相对路径-->
            <javaModelGenerator targetPackage="com.boot.model"
                                targetProject="src\main\java" >
                <!-- 是否在当前路径下新加一层schema,eg:fase -->
                <property name="enableSubPackages" value="false"/>
                <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
    
            <!-- 生成mapxml文件 targetPackage是指定生成的路径 targetProject是项目的相对路径-->
            <sqlMapGenerator targetPackage="com.boot.dao.mapper"
                             targetProject="src\main\java" >
                <!-- 是否在当前路径下新加一层schema,eg:fase -->
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
    
            <!-- 生成mapxml对应client,也就是接口dao targetPackage是指定生成的路径 targetProject是项目的相对路径-->
            <javaClientGenerator targetPackage="com.boot.dao.mapper"
                                 targetProject="src\main\java" type="XMLMAPPER" >
                <!-- 是否在当前路径下新加一层schema,eg:fase -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
    
            <!-- 配置表信息 -->
            <table schema="test" tableName="user"
                   domainObjectName="UserDataBase" enableCountByExample="false"
                   enableDeleteByExample="false" enableSelectByExample="false"
                   enableUpdateByExample="false">
                <!-- schema即为数据库名 tableName为对应的数据库表 domainObjectName是要生成的实体类 enable*ByExample
                    是否生成 example类   -->
    
                <!-- 忽略列,不生成bean 字段 -->
                <!--<ignoreColumn column="FRED" />-->
                <!-- 指定列的java数据类型 -->
                <!--<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />-->
            </table>
    
        </context>
    </generatorConfiguration>

    在generatorConfig.xml文件中有引用application.properties文件内的值,所以我们还需要在resources文件下建一个application.properties文件

    application.properties:

    server.port=8082
    
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=******

    接下来就是编写一个Generator的生成实体的类来进行运行

    package com.boot;
    
    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.internal.DefaultShellCallback;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Generator {
        public static void main(String[] args) throws Exception {
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            File configFile = new File("src/main/resources/generatorConfig.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        }
    }

    本地运行编写的Generator类,就会自动生成相应的实体,mapper,mapper.XML了。

    这是我的后台输出:

    刷新一下项目就可以看到生成的类和mapper文件了。

    重点注意:

    1.数据库连接错误!

    报错信息:

    For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. 
    You need either to explicitly disable SSL by setting useSSL=false, or 
    set useSSL=true and provide truststore for server certificate verification.

    解决办法: 

    在mysql连接字符串url中加入ssl=true或者false即可,如下所示。
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
    

    2.日志正常输出!但是没有生成文件!!

    首先要查看generator.xml文件的javaModelGenerator、sqlMapGenerator、javaClientGenerator标签内的 targetPackage、targetProject属性是否写对!!

    如果正确在查看编写的Generator类内File文件路径是否正确!!切记查看正确! 作者吃了大亏……

     2. 搭建逆向工程方法二

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generate</artifactId>
                <version>2.3</version>
            </dependency>
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.28</version>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>2.0</version>
            </dependency>
    package utils;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
    import com.baomidou.mybatisplus.generator.config.GlobalConfig;
    import com.baomidou.mybatisplus.generator.config.PackageConfig;
    import com.baomidou.mybatisplus.generator.config.StrategyConfig;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    /**
     * 数据库对象 代码生成器  mysql
     */
    public class Generate {
    
        public static void main(String[] args) {
            AutoGenerator mpg = new AutoGenerator();
            GlobalConfig gc = new GlobalConfig();
            gc.setAuthor("guoCh");
            gc.setOutputDir("E://output"); // 输出目录
            gc.setFileOverride(true);
            gc.setActiveRecord(true);
            gc.setEnableCache(false);
            gc.setBaseResultMap(true);
            gc.setBaseColumnList(true);
    
            gc.setMapperName("%sDao");
            gc.setXmlName("%sDao");
            gc.setServiceName("%sService");
    
            mpg.setGlobalConfig(gc);
    
            // 数据源
            DataSourceConfig dsc = new DataSourceConfig();
            //数据库类型
            dsc.setDbType(DbType.ORACLE);
    
    //        dsc.setTypeConvert(new MySqlTypeConvert(){//
    //                public DbColumnType processTypeConvert(String fieldType){
    //                    System.out.println("类型转换:" + fieldType);
    //                    return super.processTypeConvert(fieldType);
    //                }
    //
    //            }
    //        );
            //数据库驱动
            dsc.setDriverName("com.oscar.Driver");
            dsc.setUsername("sysdba");
            dsc.setPassword("szoscar55");
            dsc.setUrl("jdbc:oscar://5.9.111.14:2003/OSRDB");
            mpg.setDataSource(dsc);
    
            StrategyConfig strategy = new StrategyConfig(); // 生成多个表
            strategy.setEntityTableFieldAnnotationEnable(true);
            // strategy.setNaming(NamingStrategy.no_change);
            String[] tableName = {"SCHEMA_STAGE_SETTING_EXECUTE"};
            strategy.setInclude(tableName); //表名
            strategy.setNaming(NamingStrategy.underline_to_camel);
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            //  strategy.setEntityLombokModel(true); // get set
            strategy.setRestControllerStyle(true);
            mpg.setStrategy(strategy);
            PackageConfig pc = new PackageConfig();
            pc.setParent("com.tianzhi.req.dmd"); // 父包名
            pc.setEntity("entity.dto");
            pc.setMapper("mapper");
            pc.setService("service");
            pc.setController("controller");
            pc.setXml("mapper");
            mpg.setPackageInfo(pc);
            mpg.execute();
        }
    
    }
  • 相关阅读:
    [转]浏览器退出之后php还会继续执行么?
    vim常用命令
    [转]自己写PHP扩展之创建一个类
    [转]用C/C++扩展PHP详解
    [转]PHP的执行流程,PHP扩展加载过程
    用扩展开发一个PHP类
    gcc
    Linux常用网络命令
    TCP-IP详解学习笔记1
    在Linux中调试段错误(core dumped)
  • 原文地址:https://www.cnblogs.com/nhdlb/p/10904567.html
Copyright © 2011-2022 走看看