工具|mybatis插件逆向生成實體

前言

這篇文章想介紹一下mybatis-generator-maven-plugin插件,它可以幫助我們逆向的將數據庫表生成相應的實體。

使用

如圖所示的目錄結構中,entity存放的是數據庫表生成的實體,mapper存放的是dao接口文件。

resources資源目錄裏,generator存放的是逆向生成所需要的配置文件。mapper文件存放的是數據庫操作的XML。
在這裏插入圖片描述
在這裏插入圖片描述

generator.properties

mysql-connector-java-8.0.13.jar是我通過maven引入後,下載到本地的包。

# 手動配置以下選項
# 數據庫驅動:選擇你的本地硬盤上面的數據庫驅動包
classPathEntry = C:\\Users\\fang\\.m2\\repository\\mysql\\mysql-connector-java\\8.0.13\\mysql-connector-java-8.0.13.jar
# 數據庫連接驅動、連接地址、名稱、用戶名、密碼
driver =com.mysql.jdbc.Driver
url = jdbc:mysql://192.168.0.30:3306/evaluation_vrm?characterEncoding=utf-8
db = test_fang
userId = root
password = 111111
# 生成pojo的包名位置 在src/main/java目錄下
pojoTargetPackage = cn.fang.model.entity
# 生成DAO的包名位置 在src/main/java目錄下
daoTargetPackage = cn.fang.model.mapper
# 生成Mapper的包名位置 位於src/main/resources目錄下
mapperTargetPackage = mapper

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">
<!--利用MyBatis Generator裏面的Xml文件格式,複製成爲resource的xml文件,並進行修改-->
<generatorConfiguration>

    <properties resource="generator/generator.properties"/>

    <!--找到MySQL驅動包的路徑-->
<!--    <classPathEntry location="C:\Users\fang\.m2\repository\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar" />-->
    <!--配置連接MySQL數據庫的信息-->
    <!-- 引入配置文件 -->


    <!-- 一個數據庫一個context -->
    <!--defaultModelType="flat" 大數據字段,不分表 -->
    <context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">

        <!-- 自動識別數據庫關鍵字,默認false,如果設置爲true,根據SqlReservedWords中定義的關鍵字列表;
        一般保留默認值,遇到數據庫關鍵字(Java關鍵字),使用columnOverride覆蓋 -->
        <property name="autoDelimitKeywords" value="true" />
        <!-- 生成的Java文件的編碼 -->
        <property name="javaFileEncoding" value="utf-8" />
        <!-- beginningDelimiter和endingDelimiter:指明數據庫的用於標記數據庫對象名的符號,比如ORACLE就是雙引號,MYSQL默認是`反引號; -->
        <property name="beginningDelimiter" value="`" />
        <property name="endingDelimiter" value="`" />

        <!-- 格式化java代碼 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!-- 格式化XML代碼 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>


        <!-- 生成的pojo,將implements Serializable -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
        <!-- 生成的pojo帶有toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>


        <!-- 註釋 -->
        <commentGenerator >
            <property name="suppressAllComments" value="false"/><!-- 是否取消註釋 -->
            <property name="suppressDate" value="true" /> <!-- 是否生成註釋代時間戳-->
        </commentGenerator>

        <!-- jdbc連接 -->
        <jdbcConnection driverClass="${driver}" connectionURL="${url}" userId="${userId}" password="${password}" >
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
        <!-- 類型轉換 -->
        <!--配置各個文件的相對路徑和項目路徑-->
        <!--產生實體類,需要和App是同級的-->
        <javaModelGenerator targetPackage="${pojoTargetPackage}" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!--映射文件,一定是在resources中的-->
        <sqlMapGenerator targetPackage="${mapperTargetPackage}"  targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!--底層dao-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${daoTargetPackage}"  targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!--數據表-->
        <!-- 需要生成的表 -->
        <!-- 可以寫上不存在的表不拋錯,只是忽略,例如表tb_xxyyzz -->
        <!-- schema隨便寫(可以不寫),mysql無schema概念,oracle中schema跟用戶名相同,每個用戶名都有一個與之同名的schema,例如scott用戶有scott的schema -->
        <!-- domainObjectName指定生成的model的類名,可以默認不指定 -->
        <!-- enableCountByExample等屬性控制是否生成該方法,默認生成 -->
        <!-- %匹配所有表格 -->
         <table tableName="%" >
             <generatedKey column="id" sqlStatement="MySql" identity="true" />
         </table>
        <!-- 如果有自增長的id,希望在插入後獲得id,可以配置generatedKey,需要指定column,
        sqlStatement未Mysql,identity必須爲true。,在java端,insert(entity)後,由entity.getXxxId()獲得自增長的id -->
        <!-- 非自增長的不要出現generatedKey,否則報錯 -->
        <!--指定表進行逆向生成-->
        <!--<table tableName="ips">-->
        <!--<generatedKey column="id" sqlStatement="MySql" identity="true" />-->
        <!--</table>-->


    </context>

</generatorConfiguration>

在pom文件引入build部分的xml

<build>
        <plugins>
            <!-- mapper-generator START -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <!--允許移動生成的文件 -->
                    <verbose>true</verbose>
                    <!--允許覆蓋生成的文件 -->
                    <overwrite>true</overwrite>
                    <!--generatorConfig.xml文件 位置 -->
                    <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
                </configuration>
                <dependencies>
                    <dependency>
                        <!--指定連接驅動 -->
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.13</version>
                    </dependency>
                </dependencies>
            </plugin>
            <!-- mapper-generator END -->
        </plugins>
    </build>

終極指令

最後在當前項目模塊下執行mvn mybatis-generator:generate -e即可生成實體。

在這裏插入圖片描述

簡單操作

通過逆向生成的xml和實體,對於單表的簡單操作,可以通過邏輯代碼進行操作。

eg.我想查詢手機類型相匹配的用戶實體,只需要在業務層實現如下語句即可,UsersExampleUsers爲逆向生成的實體。usersMapper爲逆向生成的dao接口文件。

UsersExample usersExample = new UsersExample();
usersExample.createCriteria().andMobileEqualTo(emobileType);
List<Users> list = usersMapper.selectByExample(usersExample);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章