近日我在搭建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文件路徑是否正確!!切記查看正確! 作者吃了大虧……