Mybatis官方生成器的使用方式
在這篇文章中,我們將通過實際代碼示例來說明如何使用 MyBatis Generator (MBG) 來自動化生成 MyBatis 項目所需的實體類、Mapper 接口和 Mapper XML 文件。
我們將使用一個 Maven 插件來執(zhí)行代碼生成,并提供詳細的配置和解釋。
1. MyBatis Generator 簡介
MyBatis Generator(簡稱 MBG)是 MyBatis 官方提供的工具,旨在通過數(shù)據(jù)庫表結構自動生成 MyBatis 所需的代碼,包括 Java 實體類(Model)、Mapper 接口以及 Mapper XML 文件。使用 MBG,可以大大減少開發(fā)人員在進行 CRUD 操作時的重復工作,提升開發(fā)效率和代碼一致性。
2. MyBatis Generator 的功能
MBG 主要提供以下功能:
- 生成 Java 實體類(Model):自動根據(jù)數(shù)據(jù)庫表的結構生成對應的 Java 類,類的字段和數(shù)據(jù)庫表的列一一對應。
- 生成 Mapper 接口:為每個數(shù)據(jù)庫表生成對應的 Mapper 接口,接口中包含了常見的 CRUD 方法。
- 生成 MyBatis 映射文件(Mapper XML):根據(jù)數(shù)據(jù)庫表結構,自動生成與 Mapper 接口方法對應的 XML 映射文件,其中包含 SQL 語句的定義。
3. 使用 MyBatis Generator 的優(yōu)勢
- 節(jié)省時間和精力:通過自動化生成代碼,減少了重復勞動,開發(fā)人員可以將更多時間專注于業(yè)務邏輯的實現(xiàn)。
- 減少錯誤:自動生成的代碼遵循一定的規(guī)范和模板,避免了手動編寫時的拼寫錯誤和不規(guī)范。
- 提高一致性:生成的代碼在結構和格式上非常統(tǒng)一,便于團隊協(xié)作和代碼的維護。
- 靈活性和擴展性:MBG 提供了豐富的配置選項,可以根據(jù)項目的需求定制生成的代碼,包括字段類型映射、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)有的代碼,設置 overwrite 為 true --> <overwrite>true</overwrite> <!-- 顯示生成過程中的詳細日志 --> <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
:如果設置為true
,則允許覆蓋已存在的生成文件。verbose
:如果設置為true
,則會輸出更多的生成過程日志,方便調試。
4.2 MyBatis Generator 配置文件
接下來是 MyBatis Generator 的核心配置文件 generator-config-business.xml
,在配置生成器的基本設置時,需要關注以下幾個重要配置:
數(shù)據(jù)庫連接、生成的 Java 類、Mapper 類及 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="Mysql" targetRuntime="MyBatis3" defaultModelType="flat"> <!-- 自動檢查數(shù)據(jù)庫的關鍵字并加上反引號,避免與數(shù)據(jù)庫關鍵字沖突 --> <property name="autoDelimitKeywords" value="true"/> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <!-- 插件配置:增強 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ù)據(jù)庫的連接信息 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/train?characterEncoding=UTF8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai" userId="train" password="123456"> </jdbcConnection> <!-- 配置生成的實體類位置 --> <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 配置項說明
jdbcConnection
:配置數(shù)據(jù)庫連接信息,包括數(shù)據(jù)庫的 URL、用戶名、密碼等。javaModelGenerator
:配置生成的 Java 實體類的存放位置。sqlMapGenerator
:配置生成的 SQL 映射文件的存放位置。javaClientGenerator
:配置生成的 Mapper 接口類的位置。table
:指定要生成代碼的數(shù)據(jù)庫表,可以多次配置以支持多個表。
4.4 執(zhí)行 MyBatis Generator 生成代碼
配置完成后,可以通過 Maven 執(zhí)行代碼生成。
在命令行中運行以下命令(或者在 Maven 插件中雙擊執(zhí)行):
mvn mybatis-generator:generate
執(zhí)行后,MyBatis Generator 會根據(jù)配置文件自動生成對應的 Java 實體類、Example
類(用于復雜查詢)、Mapper 接口和 Mapper XML 文件。
生成的文件結構大致如下:
src/main/java └── com └── stu └── train └── member └── domain └── Passenger.java <-- 生成的實體類 └── PassengerExample.java <-- 生成的輔助類 └── mapper └── PassengerMapper.java <-- 生成的 Mapper 接口 src/main/resources └── mapper └── PassengerMapper.xml <-- 生成的 XML 映射文件
MyBatis Generator 自動生成的代碼包括以下幾個部分:
- 實體類(
Passenger.java
):對應數(shù)據(jù)庫表的每一列,它通常包含基本的字段、getter 和 setter 方法。 Example
類(PassengerExample.java
):用于構建動態(tài)查詢條件,支持鏈式調用來添加查詢條件、排序、分頁等。- Mapper 接口(
PassengerMapper.java
):定義與數(shù)據(jù)庫交互的方法,如增、刪、改、查。 - Mapper XML 文件(
PassengerMapper.xml
):對應 Mapper 接口的方法,編寫 SQL 查詢語句。
4.5 生成的代碼示例
Passenger.java(實體類)
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
類是用來構建 SQL 查詢條件的。它通常包含一個內部類 Criteria
,用來定義具體的查詢條件。
以下是一個 PassengerExample
的生成代碼示例:
public class PassengerExample { protected String orderByClause; protected boolean distinct; protected List<Criteria> oredCriteria; public PassengerExample() { oredCriteria = new ArrayList<>(); } // 設置排序字段 public void setOrderByClause(String orderByClause) { this.orderByClause = orderByClause; } public String getOrderByClause() { return orderByClause; } // 設置查詢是否去重 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 類進行動態(tài)查詢
使用 PassengerExample
類進行動態(tài)查詢時,可以通過 Criteria
類來設置查詢條件,然后傳遞給 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);
在這個例子中,我們使用 PassengerExample
和 Criteria
構造了一個動態(tài) SQL 查詢,其中包含了兩個條件:
name
字段包含 “John”。age
字段大于 20。
最后,使用 passengerMapper.selectByExample(example)
執(zhí)行查詢操作。
總結
通過 MyBatis Generator 的配置和使用示例,我們可以快速根據(jù)數(shù)據(jù)庫表生成實體類、Mapper 接口和 XML 映射文件,極大地提高開發(fā)效率。
上述代碼示例展示了如何在 Maven 項目中配置 MyBatis Generator,并結合實際數(shù)據(jù)庫表生成相應的代碼。通過自定義配置文件,我們可以控制生成的代碼風格、存放位置以及生成的內容,進一步提高代碼的自動化程度和一致性。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mybatis-generator自動生成dao、mapping、bean配置操作
這篇文章主要介紹了mybatis-generator自動生成dao、mapping、bean配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08SpringBoot整合Redisson實現(xiàn)高性能實時排行榜
在當今的互聯(lián)網(wǎng)應用中,排行榜功能幾乎無處不在,那么如何用Spring Boot和Redisson快速搭建一個高性能的實時排行榜呢,下面我們就來詳細聊聊這個技術方案吧2025-04-04Jenkins系統(tǒng)如何進行數(shù)據(jù)備份
隨著我們的長期使用,Jenkins系統(tǒng)中的內容會越來越多,特別是一些配置相關的東西,不能有任何丟失。這個時候我們就需要定期備份我們的Jenkins系統(tǒng),避免一些誤操作不小心刪除了某些重要文件,本文就將介紹下Jenkins系統(tǒng)如何進行數(shù)據(jù)備份2021-06-06SpringBoot整合WebService的實戰(zhàn)案例
WebService是一個SOA(面向服務的編程)的架構,它是不依賴于語言,平臺等,可以實現(xiàn)不同的語言間的相互調用,這篇文章主要給大家介紹了關于SpringBoot整合WebService的相關資料,需要的朋友可以參考下2024-07-07微服務springcloud 03.Eureka實現(xiàn)高可用的過程
這篇文章主要介紹了微服務springcloud 03.Eureka實現(xiàn)高可用的相關資料,本文給大家介紹的非常詳細,需要的朋友可以參考下2024-07-07使用maven的profile構建不同環(huán)境配置的方法
這篇文章主要介紹了使用maven的profile構建不同環(huán)境配置的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01