最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis官方生成器的使用方式

 更新時間:2025年01月21日 15:28:02   作者:qq_44199605  
本文詳細(xì)介紹了MyBatisGenerator(MBG)的使用方法,通過實(shí)際代碼示例展示了如何配置Maven插件來自動化生成MyBatis項(xiàng)目所需的實(shí)體類、Mapper接口和MapperXML文件,MBG通過配置文件和Maven插件,可以大大減少開發(fā)人員在進(jìn)行CRUD操作時的重復(fù)工作,提升開發(fā)效率和代碼一致性

在這篇文章中,我們將通過實(shí)際代碼示例來說明如何使用 MyBatis Generator (MBG) 來自動化生成 MyBatis 項(xiàng)目所需的實(shí)體類、Mapper 接口和 Mapper XML 文件。

我們將使用一個 Maven 插件來執(zhí)行代碼生成,并提供詳細(xì)的配置和解釋。

1. MyBatis Generator 簡介

MyBatis Generator(簡稱 MBG)是 MyBatis 官方提供的工具,旨在通過數(shù)據(jù)庫表結(jié)構(gòu)自動生成 MyBatis 所需的代碼,包括 Java 實(shí)體類(Model)、Mapper 接口以及 Mapper XML 文件。使用 MBG,可以大大減少開發(fā)人員在進(jìn)行 CRUD 操作時的重復(fù)工作,提升開發(fā)效率和代碼一致性。

2. MyBatis Generator 的功能

MBG 主要提供以下功能:

  • 生成 Java 實(shí)體類(Model):自動根據(jù)數(shù)據(jù)庫表的結(jié)構(gòu)生成對應(yīng)的 Java 類,類的字段和數(shù)據(jù)庫表的列一一對應(yīng)。
  • 生成 Mapper 接口:為每個數(shù)據(jù)庫表生成對應(yīng)的 Mapper 接口,接口中包含了常見的 CRUD 方法。
  • 生成 MyBatis 映射文件(Mapper XML):根據(jù)數(shù)據(jù)庫表結(jié)構(gòu),自動生成與 Mapper 接口方法對應(yīng)的 XML 映射文件,其中包含 SQL 語句的定義。

3. 使用 MyBatis Generator 的優(yōu)勢

  • 節(jié)省時間和精力:通過自動化生成代碼,減少了重復(fù)勞動,開發(fā)人員可以將更多時間專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
  • 減少錯誤:自動生成的代碼遵循一定的規(guī)范和模板,避免了手動編寫時的拼寫錯誤和不規(guī)范。
  • 提高一致性:生成的代碼在結(jié)構(gòu)和格式上非常統(tǒng)一,便于團(tuán)隊(duì)協(xié)作和代碼的維護(hù)。
  • 靈活性和擴(kuò)展性:MBG 提供了豐富的配置選項(xiàng),可以根據(jù)項(xiàng)目的需求定制生成的代碼,包括字段類型映射、SQL 語句生成規(guī)則等。

4. MyBatis Generator 配置與使用示例

4.1 Maven 插件配置

首先,我們需要在 pom.xml 中添加 MyBatis Generator 插件的配置。

以下是一個典型的 Maven 配置段:

<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.4.0</version>
    <configuration>
        <!-- 指定 MyBatis Generator 的配置文件 -->
        <configurationFile>src/main/resources/generator-config-business.xml</configurationFile>
        
        <!-- 如果需要覆蓋現(xiàn)有的代碼,設(shè)置 overwrite 為 true -->
        <overwrite>true</overwrite>
        
        <!-- 顯示生成過程中的詳細(xì)日志 -->
        <verbose>true</verbose>
    </configuration>
    <dependencies>
        <!-- 添加數(shù)據(jù)庫連接依賴,如 MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
    </dependencies>
</plugin>
  • configurationFile:指定 MyBatis Generator 的配置文件路徑。
  • overwrite:如果設(shè)置為 true,則允許覆蓋已存在的生成文件。
  • verbose:如果設(shè)置為 true,則會輸出更多的生成過程日志,方便調(diào)試。

4.2 MyBatis Generator 配置文件

接下來是 MyBatis Generator 的核心配置文件 generator-config-business.xml,在配置生成器的基本設(shè)置時,需要關(guān)注以下幾個重要配置:

數(shù)據(jù)庫連接、生成的 Java 類、Mapper 類及 XML 文件配置。以下是該配置文件的具體內(nèi)容:

<?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="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">

        <!-- 自動檢查數(shù)據(jù)庫的關(guān)鍵字并加上反引號,避免與數(shù)據(jù)庫關(guān)鍵字沖突 -->
        <property name="autoDelimitKeywords" value="true"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- 插件配置:增強(qiáng) XML 的合并性 -->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

        <!-- 插件配置:自動生成 toString() 方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <!-- 配置注釋生成策略,這里選擇不生成注釋 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 配置數(shù)據(jù)庫連接,修改為實(shí)際數(shù)據(jù)庫的連接信息 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/train?characterEncoding=UTF8&amp;allowPublicKeyRetrieval=true&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"
                        userId="train"
                        password="123456">
        </jdbcConnection>

        <!-- 配置生成的實(shí)體類位置 -->
        <javaModelGenerator targetProject="../member/src/main/java"
                            targetPackage="com.stu.train.member.domain"/>

        <!-- 配置生成的 SQL 映射文件位置 -->
        <sqlMapGenerator targetProject="../member/src/main/resources"
                         targetPackage="mapper"/>

        <!-- 配置生成的 Mapper 類位置 -->
        <javaClientGenerator targetProject="../member/src/main/java"
                             targetPackage="com.stu.train.member.mapper"
                             type="XMLMAPPER"/>

        <!-- 選擇要生成代碼的數(shù)據(jù)庫表 -->
        <table tableName="passenger" domainObjectName="Passenger"/>
    </context>
</generatorConfiguration>

4.3 配置項(xiàng)說明

  • jdbcConnection:配置數(shù)據(jù)庫連接信息,包括數(shù)據(jù)庫的 URL、用戶名、密碼等。
  • javaModelGenerator:配置生成的 Java 實(shí)體類的存放位置。
  • sqlMapGenerator:配置生成的 SQL 映射文件的存放位置。
  • javaClientGenerator:配置生成的 Mapper 接口類的位置。
  • table:指定要生成代碼的數(shù)據(jù)庫表,可以多次配置以支持多個表。

4.4 執(zhí)行 MyBatis Generator 生成代碼

配置完成后,可以通過 Maven 執(zhí)行代碼生成。

在命令行中運(yùn)行以下命令(或者在 Maven 插件中雙擊執(zhí)行):

mvn mybatis-generator:generate

執(zhí)行后,MyBatis Generator 會根據(jù)配置文件自動生成對應(yīng)的 Java 實(shí)體類、Example 類(用于復(fù)雜查詢)、Mapper 接口和 Mapper XML 文件。

生成的文件結(jié)構(gòu)大致如下:

src/main/java
    └── com
        └── stu
            └── train
                └── member
                    └── domain
                        └── Passenger.java   <-- 生成的實(shí)體類
                        └── PassengerExample.java   <-- 生成的輔助類
                    └── mapper
                        └── PassengerMapper.java   <-- 生成的 Mapper 接口
src/main/resources
    └── mapper
        └── PassengerMapper.xml  <-- 生成的 XML 映射文件

MyBatis Generator 自動生成的代碼包括以下幾個部分:

  1. 實(shí)體類(Passenger.java:對應(yīng)數(shù)據(jù)庫表的每一列,它通常包含基本的字段、getter 和 setter 方法。
  2. Example 類(PassengerExample.java:用于構(gòu)建動態(tài)查詢條件,支持鏈?zhǔn)秸{(diào)用來添加查詢條件、排序、分頁等。
  3. Mapper 接口(PassengerMapper.java:定義與數(shù)據(jù)庫交互的方法,如增、刪、改、查。
  4. Mapper XML 文件(PassengerMapper.xml:對應(yīng) Mapper 接口的方法,編寫 SQL 查詢語句。

4.5 生成的代碼示例

Passenger.java(實(shí)體類)

public class Passenger {
    private Integer id;
    private String name;
    private Integer age;

    // Getter 和 Setter 方法

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

PassengerMapper.java(Mapper 接口)

public interface PassengerMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Passenger record);

    Passenger selectByPrimaryKey(Integer id);

    int updateByPrimaryKey(Passenger record);

    List<Passenger> selectByExample(PassengerExample example);
}

PassengerMapper.xml(Mapper 映射文件)

<mapper namespace="com.stu.train.member.mapper.PassengerMapper">
    <!-- 查詢單個乘客 -->
    <select id="selectByPrimaryKey" resultType="com.stu.train.member.domain.Passenger">
        SELECT id, name, age FROM passenger WHERE id = #{id}
    </select>

    <!-- 插入乘客 -->
    <insert id="insert" parameterType="com.stu.train.member.domain.Passenger">
        INSERT INTO passenger (name, age) VALUES (#{name}, #{age})
    </insert>

    <!-- 刪除乘客 -->
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        DELETE FROM passenger WHERE id = #{id}
    </delete>

    <!-- 更新乘客 -->
    <update id="updateByPrimaryKey" parameterType="com.stu.train.member.domain.Passenger">
        UPDATE passenger
        SET name = #{name}, age = #{age}
        WHERE id = #{id}
    </update>
</mapper>

PassengerExample.java(Example 類)

PassengerExample 類是用來構(gòu)建 SQL 查詢條件的。它通常包含一個內(nèi)部類 Criteria,用來定義具體的查詢條件。

以下是一個 PassengerExample 的生成代碼示例:

public class PassengerExample {
    protected String orderByClause;
    protected boolean distinct;
    protected List<Criteria> oredCriteria;

    public PassengerExample() {
        oredCriteria = new ArrayList<>();
    }

    // 設(shè)置排序字段
    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    public String getOrderByClause() {
        return orderByClause;
    }

    // 設(shè)置查詢是否去重
    public void setDistinct(boolean distinct) {
        this.distinct = distinct;
    }

    public boolean isDistinct() {
        return distinct;
    }

    // 獲取所有查詢條件
    public List<Criteria> getOredCriteria() {
        return oredCriteria;
    }

    // 添加查詢條件
    public void or(Criteria criteria) {
        oredCriteria.add(criteria);
    }

    public Criteria or() {
        Criteria criteria = createCriteriaInternal();
        oredCriteria.add(criteria);
        return criteria;
    }

    // 創(chuàng)建查詢條件
    public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }

    protected Criteria createCriteriaInternal() {
        return new Criteria();
    }

    // 清除查詢條件
    public void clear() {
        oredCriteria.clear();
        orderByClause = null;
        distinct = false;
    }

    public static class Criteria {
        protected List<Criterion> criteria;

        protected Criteria() {
            criteria = new ArrayList<>();
        }

        // 判斷條件是否有效
        public boolean isValid() {
            return criteria.size() > 0;
        }

        // 獲取所有條件
        public List<Criterion> getAllCriteria() {
            return criteria;
        }

        // 添加單一條件
        public void addCriterion(String condition) {
            criteria.add(new Criterion(condition));
        }

        public void addCriterion(String condition, Object value, String property) {
            criteria.add(new Criterion(condition, value));
        }

        public void addCriterion(String condition, Object value1, Object value2, String property) {
            criteria.add(new Criterion(condition, value1, value2));
        }

        // 例如,添加條件:id = ?
        public Criteria andIdEqualTo(Integer value) {
            addCriterion("id =", value, "id");
            return this;
        }

        // 例如,添加條件:name like ?
        public Criteria andNameLike(String value) {
            addCriterion("name like", value, "name");
            return this;
        }

        // ...更多查詢條件方法
    }

    // 用于表示一個條件
    public static class Criterion {
        private String condition;
        private Object value;
        private Object secondValue;

        public Criterion(String condition) {
            this.condition = condition;
        }

        public Criterion(String condition, Object value) {
            this(condition);
            this.value = value;
        }

        public Criterion(String condition, Object value, Object secondValue) {
            this(condition, value);
            this.secondValue = secondValue;
        }

        public String getCondition() {
            return condition;
        }

        public Object getValue() {
            return value;
        }

        public Object getSecondValue() {
            return secondValue;
        }
    }
}

4.6 使用 Example 類進(jìn)行動態(tài)查詢

使用 PassengerExample 類進(jìn)行動態(tài)查詢時,可以通過 Criteria 類來設(shè)置查詢條件,然后傳遞給 Mapper 方法。

例如:

PassengerExample example = new PassengerExample();
PassengerExample.Criteria criteria = example.createCriteria();
criteria.andNameLike("%John%");  // 查詢 name 字段包含 "John" 的記錄
criteria.andAgeGreaterThan(20);  // 查詢 age 大于 20 的記錄

List<Passenger> passengers = passengerMapper.selectByExample(example);

在這個例子中,我們使用 PassengerExampleCriteria 構(gòu)造了一個動態(tài) SQL 查詢,其中包含了兩個條件:

  1. name 字段包含 “John”。
  2. age 字段大于 20。

最后,使用 passengerMapper.selectByExample(example) 執(zhí)行查詢操作。

總結(jié)

通過 MyBatis Generator 的配置和使用示例,我們可以快速根據(jù)數(shù)據(jù)庫表生成實(shí)體類、Mapper 接口和 XML 映射文件,極大地提高開發(fā)效率。

上述代碼示例展示了如何在 Maven 項(xiàng)目中配置 MyBatis Generator,并結(jié)合實(shí)際數(shù)據(jù)庫表生成相應(yīng)的代碼。通過自定義配置文件,我們可以控制生成的代碼風(fēng)格、存放位置以及生成的內(nèi)容,進(jìn)一步提高代碼的自動化程度和一致性。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java后臺調(diào)用HttpURLConnection類模擬瀏覽器請求實(shí)例(可用于接口調(diào)用)

    java后臺調(diào)用HttpURLConnection類模擬瀏覽器請求實(shí)例(可用于接口調(diào)用)

    這篇文章主要介紹了java后臺調(diào)用HttpURLConnection類模擬瀏覽器請求實(shí)例,該實(shí)例可用于接口調(diào)用,具有一定的實(shí)用價值,需要的朋友可以參考下
    2014-10-10
  • druid ParserException類錯誤問題及解決

    druid ParserException類錯誤問題及解決

    這篇文章主要介紹了druid ParserException類錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java如何獲取map中value的最大值

    java如何獲取map中value的最大值

    這篇文章主要介紹了java如何獲取map中value的最大值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Spring的@Transactional注解使用詳細(xì)解析

    Spring的@Transactional注解使用詳細(xì)解析

    這篇文章主要介紹了Spring的@Transactional注解使用詳細(xì)解析,@Transactional 注解相信大家并不陌生,平時開發(fā)中很常用的一個注解,它能保證方法內(nèi)多個數(shù)據(jù)庫操作要么同時成功、要么同時失敗,需要的朋友可以參考下
    2023-11-11
  • mybatis調(diào)用存儲過程,帶in、out參數(shù)問題

    mybatis調(diào)用存儲過程,帶in、out參數(shù)問題

    這篇文章主要介紹了mybatis調(diào)用存儲過程,帶in、out參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Feign Client超時時間設(shè)置不生效的解決方法

    Feign Client超時時間設(shè)置不生效的解決方法

    這篇文章主要為大家詳細(xì)介紹了Feign Client 超時時間設(shè)置不生效的原因與解決方法,具有一定的的參考價值,希望對大家有一定的幫助
    2025-04-04
  • 基于SpringBoot實(shí)現(xiàn)防盜鏈功能

    基于SpringBoot實(shí)現(xiàn)防盜鏈功能

    防盜鏈?zhǔn)潜Wo(hù)資源服務(wù)器的常用方法,旨在防止未經(jīng)授權(quán)的外部鏈接直接訪問服務(wù)器上的資源,如圖片、音頻和視頻文件,在本文中,我們將探討防盜鏈的概念和原理,并結(jié)合 Spring Boot 提供一個完整的可運(yùn)行示例,需要的朋友可以參考下
    2024-12-12
  • Netty分布式ByteBuf中PooledByteBufAllocator剖析

    Netty分布式ByteBuf中PooledByteBufAllocator剖析

    這篇文章主要為大家介紹了Netty分布式ByteBuf剖析PooledByteBufAllocator簡述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • SpringBoot源碼之Bean的生命周期

    SpringBoot源碼之Bean的生命周期

    spring的bean的生命周期主要是創(chuàng)建bean的過程,一個bean的生命周期主要是4個步驟,實(shí)例化,屬性注入,初始化,銷毀,本文詳細(xì)介紹了bean的生命周期,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • Linux系統(tǒng)卸載重裝JDK的完整流程

    Linux系統(tǒng)卸載重裝JDK的完整流程

    Linux系統(tǒng)有時候會默認(rèn)使用OpenJDK版本,需要卸載后重新安裝自己需要的JDK版本,下面這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)卸載重裝JDK的完整流程,需要的朋友可以參考下
    2024-02-02

最新評論

讷河市| 航空| 华亭县| 克拉玛依市| 阳信县| 区。| 潍坊市| 马边| 阿巴嘎旗| 安仁县| 友谊县| 郑州市| 陇西县| 武安市| 河间市| 阜城县| 凉城县| 通辽市| 鄂尔多斯市| 宁陵县| 宜丰县| 贵溪市| 台安县| 廊坊市| 台湾省| 宜宾市| 潮安县| 沁阳市| 通化市| 务川| 兰州市| 镇巴县| 玛多县| 阜康市| 元阳县| 淮滨县| 黎城县| 乌鲁木齐县| 吐鲁番市| 宁南县| 穆棱市|