mybatis學習筆記(五):mybatis 逆向工程

mybatis學習筆記(五):mybatis 逆向工程

在平常開發中,若是數據庫中存在多張表,本身手動建立 多個pojo 類和編寫 SQL 語法配置文件,未免太過繁瑣,mybatis 也提供了一鍵式生成這些文件的操做,咱們稱爲 mybatis 逆向工程。通常咱們在開發中採用由數據庫的表生成java代碼。java

mybatis 逆向工程的下載

貼上官網連接:Mybatis Generatormysql

固然對於 jar 包的下載,咱們能夠直接使用 maven 導入:spring

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

運行逆向工程

Mybatis Generator 提供了好幾種方式來運行逆向工程:sql

能夠經過 maven 工程,java 程序,eclipse 插件等方式運行,爲了後續開發的兼容性問題,在這裏咱們採用 java 程序經過 xml 方式配置,不用依賴於開發工具。數據庫

mybatis 逆向工程實例

在這裏咱們經過一個具體的例子來演示 mybatis 逆向工程的操做過程。apache

  • 建立一個新的maven工程:mybatis-generator。配置 pom.xml 文件,導入 相關的 jar 包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.itcast</groupId>
    <artifactId>mybatis-generator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- mysql 驅動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.12</version>
        </dependency>

        <!-- mybatis 核心jar包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <!-- mybatis 附加功能包,如日誌功能等 -->
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-launcher</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>5.2</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.5</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.22.0-GA</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>3.1.16</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>

        <!-- mybatis-generator -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
    </dependencies>
</project>
  • 在 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>
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql:///sampledb"
                        userId="root"
                        password="">
        </jdbcConnection>

        <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和
            NUMERIC 類型解析爲java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO類的位置 -->
        <javaModelGenerator targetPackage="cn.itcast.ssm.po"
                            targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema做爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從數據庫返回的值被清理先後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper"
                         targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema做爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="cn.itcast.ssm.mapper"
                             targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema做爲包的後綴 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定數據庫表 -->
        <table tableName="items"></table>
        <table tableName="orders"></table>
        <table tableName="orderdetail"></table>
        <table tableName="user"></table>


        <!-- 有些表的字段須要指定java類型
         <table schema="" tableName="">
            <columnOverride column="" javaType="" />
        </table> -->
    </context>
</generatorConfiguration>

咱們指定須要的文件路徑:api

javaModelGenerator:生成PO類的位置。mybatis

sqlMapGenerator:mapper映射文件生成的位置。app

javaClientGenerator:mapper接口生成的位置。eclipse

table:指定數據庫表。

重要:

須要注意的是這裏關於 MySQL 數據庫配置這方面,若是按上面的配置文件的話會報以下錯誤:

Loading class com.mysql.jdbc.Drive. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

其實就是由於咱們導入的 mysql-connector包使用了新的驅動,上述的com.mysql.jdbc.Driver已經廢棄,建議咱們使用 com.mysql.cj.jdbc.Driver,而且還應在鏈接的URL中須要增長時區信息。另外咱們還須要經過設置useSSL=false來顯式禁用SSL鏈接,否則也會報關於 SSL 鏈接的錯誤。

改成以下:

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql:///sampledb?serverTimezone=GMT&amp;useSSL=false"
                        userId="root"
                        password="">
</jdbcConnection>
  • 建立生成程序 GeneratorSqlmap.java ,執行生成程序,生成 mybatis 逆向工程:
package cn.itcast.ssm.generator;

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 GeneratorSqlmap {
    public void generator() throws Exception {

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定逆向工程配置文件
        File configFile = new File("/Users/weixuqin/IdeaProjects/mybatis-generator/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);

    }

    public static void main(String[] args) throws Exception {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
  • 生成後的目錄如圖所示:

注:

這裏我遇到了一個問題,本身有編寫日誌文件,可是不知道爲何老是沒法加載日誌信息,報以下信息,查閱相關資料後也沒能解決這個問題,之後有時間本身會解決這個問題。

應用 mybatis 逆向工程文件

咱們能夠複製粘貼逆向工程中的項目到本身另外的項目中使用,不推薦在原有項目中使用 mybatis generator 生成,由於很容易發生命名衝突覆蓋的問題。

這裏咱們將 ItemsMapper.java, ItemsMapper.xml, Items.java, ItemsExample.java 複製粘貼到咱們原有項目中,編寫測試文件 ItemsMapperTest.java ,查詢數據庫中 "筆記本" 的記錄:

package cn.itcast.ssm.test;

import cn.itcast.ssm.mapper.ItemsMapper;
import cn.itcast.ssm.po.Items;
import cn.itcast.ssm.po.ItemsExample;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class ItemsMapperTest {
    private ApplicationContext applicationContext;
    private ItemsMapper itemsMapper;

    //在 setUp這個方法獲得 spring 容器
    @Before
    public void setUp() throws Exception{
        applicationContext = new ClassPathXmlApplicationContext("classpath:config/spring/applicationContext.xml");
        itemsMapper = (ItemsMapper) applicationContext.getBean("itemsMapper");
    }

    @Test
    public void testSelectByExample(){
        ItemsExample itemsExample = new ItemsExample();
        //經過criteria 構造查詢條件
        ItemsExample.Criteria criteria = itemsExample.createCriteria();
        criteria.andNameEqualTo("筆記本");
        //可能返回多條記錄
        List<Items> list = itemsMapper.selectByExample(itemsExample);

        System.out.println(list);
    }
}

輸出結果以下:

這裏我剛開始運行的時候始終找不到 selectByExample() 這個方法,實際上是由於找不到個人 mapper.xml 映射文件,困惑了很久,發現 mapper.xml 並無發佈到目標文件中,(idea下,eclipse 下並無這個問題,接口類和映射文件放在同一目錄下是容許的)。

因此咱們應該將映射文件放在 resourcs 目錄下,再在 mybatis 全局配置文件中加載映射文件,再次執行上述測試文件,便不會找不到咱們的映射文件了。

<!-- 加載映射文件 -->
    <mappers>
        <!-- 經過 resource 方法一次加載一個映射文件 -->
        <mapper resource="config/sqlmap/ItemsMapper.xml"/>
    </mappers>
相關文章
相關標籤/搜索