品優購商城項目(一)mybatis逆向工程


第一階段 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寫的很一般,復雜的比如鏈表還是要自己寫,優點是穩定(應該不會報錯)。還有一點不能實現樂觀鎖,並發是個問題。

所以這個會不會都無所謂,不是加分項。懶人必備工具。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM