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(); } }
-----------------------------------
作者:怒吼的萝卜
链接:http://www.cnblogs.com/nhdlb/
-----------------------------------