第一階段 dubboX和mybatis逆向工程
用了四天時間才完成品優購項目前兩天的任務。
1、其中主要遇到的坑就是zookeeper服務消費者無法調用的問題。造成這個問題的主要原因就是忽略了dubbo的不同版本(阿里巴巴的在maven中央倉庫有,2.8.4的一般則是當當網的)。后來改用了當當網的jar包,zookeeper服務消費者調用成功。這里特此強調,一定要注意dubbo的版本。
2、接觸了新的前端框架AngularJS,這個前端框架非常方便。需要記住一些指令,做為一個后台。我沒有精力去深入學習這些,能copy並update就行了。
3、接觸了mybatis逆向工程,覺得sql使用Criteria類似與hibernate那一套。在使用鏈表,復雜查詢時還是要用自己寫的sql語句,效率應該會更高。還有包含一對多返回類型也是個問題,暫時沒碰到。
這里的逆向工程主要是通過數據庫生成java代碼,缺點是鏈表查詢要自己彌補(創建綜合實體類 或 自己寫鏈表查詢SQL並映射鏈表結果集)。
當然還有一種是根據java實體類逆向生成數據庫(外鍵關聯關系也能創建),但是沒什么意思,畢竟創建數據庫簡單而且也很重要。
這里對mybatis逆向生成Java代碼做一個記錄。
第一步,引入依賴的jar包。
!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
第二步,創建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> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自動生成的注釋 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 #######修改1:修改成自己的數據庫名,用戶及密碼--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///pinyougoudb" userId="root" password="111111"> </jdbcConnection> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO類的位置 #######修改2:修改生成實體類文件的包名--> <javaModelGenerator targetPackage="com.mybatis.model" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> <!-- 從數據庫返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 #######修改3:mapper.xml文件的包名--> <sqlMapGenerator targetPackage="dbconfig" targetProject=".\src\main\resources"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 #######4:mapper.xml文件的路徑--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.mapper" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定數據庫表 --> <table schema="" tableName="tb_address"></table> <table schema="" tableName="tb_areas"></table> <table schema="" tableName="tb_brand"></table> <table schema="" tableName="tb_cities"></table> <table schema="" tableName="tb_content"></table> <table schema="" tableName="tb_content_category"></table> <table schema="" tableName="tb_freight_template"></table> <table schema="" tableName="tb_goods"></table> <table schema="" tableName="tb_goods_desc"></table> <table schema="" tableName="tb_item"></table> <table schema="" tableName="tb_item_cat"></table> <table schema="" tableName="tb_order"></table> <table schema="" tableName="tb_order_item"></table> <table schema="" tableName="tb_pay_log"></table> <table schema="" tableName="tb_provinces"></table> <table schema="" tableName="tb_seckill_goods"></table> <table schema="" tableName="tb_seckill_order"></table> <table schema="" tableName="tb_seller"></table> <table schema="" tableName="tb_specification"></table> <table schema="" tableName="tb_specification_option"></table> <table schema="" tableName="tb_type_template"></table> <table schema="" tableName="tb_user"></table> </context> </generatorConfiguration>
第三步,創建方法,執行逆向工程生成代碼。
package com.mybatis; 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; /** * @Auther: lanhaifeng * @Date: 2019/5/21 0021 18:20 * @Description: 生成逆向工程類 * @statement: */ public class GeneratorSqlmap { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //指定 逆向工程配置文件 File configFile = new File("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); } public static void main(String[] args) throws Exception { try { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
運行這個方法即可生成需要的實體類,以及mapper文件,mapper.xml。這個只能生成簡單的sql語句。
期間配到兩個錯誤:
1、com.mysql.cj.jdbc.exceptions.SQLError.createSQLException
把mysql-connector-java的版本改成 5.1.46即可
2、找不到配置文件:generatorConfig.xml
注意這個配置文件默認是放在工程目錄下,不是resources下。如果放在src下,讀取路徑要加上src/generatorConfig.xml
生成成功

當然這個sql寫的很一般,復雜的比如鏈表還是要自己寫,優點是穩定(應該不會報錯)。還有一點不能實現樂觀鎖,並發是個問題。
所以這個會不會都無所謂,不是加分項。懶人必備工具。
