欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis逆向工程筆記小結(jié)

 更新時間:2024年05月10日 08:30:26   作者:牽著貓散步的鼠鼠  
MyBatis官方為我們提供了一個逆向工程,通過這個逆向工程,只需要建立好數(shù)據(jù)表,MyBatis就會根據(jù)這個表自動生成pojo類、mapper接口、sql映射文件,本文主要介紹了Mybatis逆向工程筆記小結(jié),具有一定的參考價值,感興趣的可以了解一下

1.前言

我們在開發(fā)傳統(tǒng)的Maven項目或者SpringBoot項目過程中,最終處理的就是對于數(shù)據(jù)的讀與存,這時就免不了寫對象關(guān)系映射代碼,實體類、mapper、mapper.xml等代碼,若存在大量的增刪改查功能的話,我們開發(fā)時就會不斷重復(fù)相同的操作,大大降低了工作效率。

為此便但成了Mybatis “逆向工程” ,所謂逆向工程,就是從數(shù)據(jù)庫表結(jié)構(gòu)出發(fā),反向去生成對應(yīng)的實體和映射代碼,今天我們在這里提供2種方案進(jìn)行實現(xiàn)。

2.實現(xiàn)方案

2.1. mybatis-generator生成

2.1.1. 環(huán)境說明

1)springboot 項目(JDK1.8)
2)apache-maven-3.6.1
3)MySQL 8.0.30

2.1.2. 數(shù)據(jù)庫表

逆向工程的第一步,需要先有數(shù)據(jù)庫表結(jié)構(gòu)!我們在這里先創(chuàng)建一個表,作為示例使用,sql腳本如下:

--若已存在,先刪除
drop table user 
-- 創(chuàng)建數(shù)據(jù)庫用戶表
create table user (
	id int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
	name varchar(100) DEFAULT NULL COMMENT '員工姓名',
	phone_num varchar(20) DEFAULT NULL COMMENT '聯(lián)系方式',
	address varchar(200) DEFAULT NULL COMMENT '住址',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2.1.3 添加Maven依賴

逆向工程的實現(xiàn),需要先引入mybatis相關(guān)依賴,如果項目中已經(jīng)引入過,可自動忽略這一步。我們主要需要mybatis,mysql基礎(chǔ)依賴,以及mybatis提供的生成器依賴

 <dependencies>
        <!-- mybatis-generator -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.1.4 數(shù)據(jù)庫連接配置

依賴與數(shù)據(jù)庫表創(chuàng)建好之后,我們就正式進(jìn)入了springboot項目中進(jìn)行逆向工程開發(fā)啦,首先在resources目錄下創(chuàng)建一個數(shù)據(jù)庫連接的配置文件:generator.properties

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/vhr?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=123456

2.1.5 配置生成規(guī)則

數(shù)據(jù)庫配置完成后,我們緊接著來設(shè)置一個生成規(guī)則,包括編碼,生成文件路徑、是否設(shè)置自定義注釋等等,這個配置可以從網(wǎng)上搜,有很多generatorConfiguration的配置。直接CV稍作修改即可

<?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>
    <!--根據(jù)配置文件讀取數(shù)據(jù)庫表信息-->
    <properties resource="generator.properties"/>
    <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
        <!--前置分隔符-->
        <property name="beginningDelimiter" value="`"/>
        <!--后置分隔符-->
        <property name="endingDelimiter" value="`"/>
        <!--設(shè)置編碼-->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 為模型生成序列化方法-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- 為生成的Java模型創(chuàng)建一個toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!--生成mapper.xml時覆蓋原文件-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
        <!--可以自定義生成model的代碼注釋-->
        <commentGenerator type="org.javaboy.vhr.utils.CommentGenerator">
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>
        <!--配置數(shù)據(jù)庫連接-->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.connectionURL}"
                        userId="${jdbc.userId}"
                        password="${jdbc.password}">
            <!--解決mysql驅(qū)動升級到8.0后不生成指定數(shù)據(jù)庫代碼的問題-->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>
        <!--指定生成model的路徑-->
        <javaModelGenerator targetPackage="org.javaboy.vhr.pojo" targetProject="vhr-web\src\main\java"/>
        <!--指定生成mapper.xml的路徑-->
        <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="vhr-web\src\main\resources"/>
        <!--指定生成mapper接口的的路徑-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.javaboy.vhr.mapper"
                             targetProject="vhr-web\src\main\java"/>
        <!--單獨生成某個表,寫具體表名,否則生成全部表tableName設(shè)為%-->
        <table tableName="user" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="false"/>
            <property name="constructorBased" value="false"/>
            <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
        </table>

    </context>
</generatorConfiguration>

2.1.6 自定義實體類注釋配置

由于在上一步我們配置了注釋生成器,因此,我們要在相應(yīng)的路徑下,創(chuàng)建一個類,來自定義注釋的生成規(guī)則。路徑:org.javaboy.vhr.utils.CommentGenerator

<commentGenerator type="org.javaboy.vhr.utils.CommentGenerator">
    <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
    <property name="suppressAllComments" value="true"/>
    <property name="suppressDate" value="true"/>
    <property name="addRemarkComments" value="true"/>
</commentGenerator>

CommentGenerator代碼

**
 * @author 86138
 * @date 2024-05-01 13:27:15
 * @description 添加自定義注釋
 */
public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments = false;

    /**
     * 設(shè)置用戶配置的參數(shù)
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    /**
     * 給字段添加注釋
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        //根據(jù)參數(shù)和備注信息判斷是否添加備注信息
        if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
            addFieldJavaDoc(field, remarks);
        }
    }

    /**
     * 給model的字段添加注釋
     */
    private void addFieldJavaDoc(Field field, String remarks) {
        //文檔注釋開始
        field.addJavaDocLine("/**");
        //獲取數(shù)據(jù)庫字段的備注信息
        String[] remarkLines = remarks.split(System.getProperty("line.separator"));
        for (String remarkLine : remarkLines) {
            field.addJavaDocLine(" * " + remarkLine);
        }
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }
}

2.1.7 使用生成器

以上步驟做完后,我們就要寫我們的逆向工程生成器啦,調(diào)用org.mybatis.generator.api中的MyBatisGenerator生成器進(jìn)行實現(xiàn)。注意:當(dāng)生成的代碼重復(fù)時,覆蓋原代碼!直接執(zhí)行下述Generator類的main方法,就會自動讀取數(shù)據(jù)庫中的表,并生成對應(yīng)的實體類與映射

public class Generator {
    public static void main(String[] args) throws Exception {
        //MBG 執(zhí)行過程中的警告信息
        List<String> warnings = new ArrayList<String>();
        //當(dāng)生成的代碼重復(fù)時,覆蓋原代碼
        boolean overwrite = true;
        //讀取我們的 MBG 配置文件
        InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //創(chuàng)建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //執(zhí)行生成代碼
        myBatisGenerator.generate(null);
        //輸出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

2.2. MybatisX插件生成(推薦)

基于方案一,我們可以快速的根據(jù)數(shù)據(jù)庫中的表進(jìn)行逆向工程的創(chuàng)建,大量的減少了我們的重復(fù)性工作,但是!它的實現(xiàn)還是比較復(fù)雜的,generatorConfiguration配置中的內(nèi)容豐富且復(fù)雜,比較難記,而且在原有代碼中需要寫一定的代碼量才能實現(xiàn)。

接下來我們要說的這種方案二,幾乎不用寫任何代碼,只需要點點點就可以實現(xiàn)逆向工程啦,如果你使用idea的話,這種方案尤其方便。

2.2.1 下載IDEA插件

在插件管理中下載MybatisX插件

2.2.2 配置數(shù)據(jù)源

在idea的database中配置數(shù)據(jù)源,這里以MySQL為例,需要注意時區(qū)的配置。

 2.2.3 配置maven依賴

<!--lombok依賴-->
 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <optional>true</optional>
 </dependency>
 <!--MyBatis Plus依賴-->
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.1.0</version>
 </dependency>

2.2.4 配置生成規(guī)則 

打開剛剛配置好的本地數(shù)據(jù)庫,選擇你想構(gòu)建的數(shù)據(jù)表,右鍵 -> MybatisX-Generator。

 選擇項目包路徑、實體包名、表名;

next后繼續(xù)配置mapper、xml、service的生成路徑以及需要的注釋功能,hashCode/equals、Lombk注解等等。這個要根據(jù)你項目的實際情況來選擇 

在上一步的最后配置完成,點擊Finish按鈕,查看結(jié)果,在對應(yīng)的路徑下成功的生成了我們需要的文件。

3.總結(jié)

這次我們簡單介紹了Mybatis逆向工程的兩種實現(xiàn)方案,方案一實現(xiàn)復(fù)雜,但可以滿足基本的增刪改查的實現(xiàn),博主還是更偏向于第二種哈哈,可視化操作起來比較簡單,大家可以根據(jù)自己的日常開發(fā)場景,進(jìn)行合理選擇。

到此這篇關(guān)于Mybatis逆向工程筆記小結(jié)的文章就介紹到這了,更多相關(guān)Mybatis逆向工程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中URL傳中文時亂碼的解決方法

    Java中URL傳中文時亂碼的解決方法

    為什么說亂碼是中國程序員無法避免的話題呢?這個主要是編碼機制上的原因,大家都知道中文和英文的編碼格式不一樣,解碼自然也不一樣!這篇文章就給大家分享了Java中URL傳中文時亂碼的解決方法,有需要的朋友們可以參考借鑒。
    2016-10-10
  • Java與Python之間使用jython工具類實現(xiàn)數(shù)據(jù)交互

    Java與Python之間使用jython工具類實現(xiàn)數(shù)據(jù)交互

    今天小編就為大家分享一篇關(guān)于Java與Python之間使用jython工具類實現(xiàn)數(shù)據(jù)交互,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 淺談Arrays.asList()方法的使用

    淺談Arrays.asList()方法的使用

    本文主要介紹了Arrays.asList()方法的使用。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C++ 歸并排序(merge sort)案例詳解

    C++ 歸并排序(merge sort)案例詳解

    這篇文章主要介紹了C++ 歸并排序(merge sort)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    本篇文章主要介紹了Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • Spring Boot中使用Redis做緩存的方法實例

    Spring Boot中使用Redis做緩存的方法實例

    這篇文章主要給大家介紹了關(guān)于Spring Boot中使用Redis做緩存的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Java如何使用spire進(jìn)行word文檔的替換詳解

    Java如何使用spire進(jìn)行word文檔的替換詳解

    創(chuàng)作一份文案經(jīng)常會高頻率地使用某些詞匯,如地名、人名、人物職位等,若表述有誤,就需要整體撤換,下面這篇文章主要給大家介紹了關(guān)于Java如何使用spire進(jìn)行word文檔的替換的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • java stringbuffer的用法示例

    java stringbuffer的用法示例

    這篇文章主要介紹了java stringbuffer的用法示例,字符串緩沖區(qū),是一個容器(當(dāng)返回到的是String時而且長度不確定,數(shù)據(jù)類型不確定時就可以用StringBuffer)其實底層還是數(shù)組,只是被封裝了,對外提供了方法,初始容量為16個字符
    2014-01-01
  • spring boot如何加入mail郵件支持

    spring boot如何加入mail郵件支持

    這篇文章主要介紹了spring boot如何加入mail郵件支持,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • spring?boot配置dubbo方式(properties)

    spring?boot配置dubbo方式(properties)

    這篇文章主要介紹了spring?boot配置dubbo方式(properties),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論