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

MyBatis Generator介紹及使用方法

 更新時間:2023年06月02日 09:01:36   作者:javgo.cn  
MyBatis Generator 是一款針對 MyBatis 或 iBATIS 設(shè)計的代碼生成器,由 MyBatis 官方提供,這篇文章主要介紹了MyBatis Generator介紹及使用方法,需要的朋友可以參考下

手動編寫 SQL 語句和映射實體類的過程常常是繁瑣且易出錯的。這時,我們就可以借助 MyBatis Generator (MBG) 這個強(qiáng)大的工具來自動化生成這部分代碼。

1.什么是 MyBatis Generator

MyBatis Generator 是一款針對 MyBatis 或 iBATIS 設(shè)計的代碼生成器,由 MyBatis 官方提供。它可以生成 MyBatis 的 Java 實體類、mapper.xml 文件以及對應(yīng)的 Mapper 接口,極大地減少了開發(fā)人員手寫 SQL 語句和映射實體類的工作量,提高了開發(fā)效率。

2.使用 MyBatis Generator

2.1 導(dǎo)入依賴

首先,我們需要在項目中添加 MyBatis Generator 的依賴:

<!-- MyBatis 生成器 -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>${mybatis-generator.version}</version>
</dependency>

當(dāng)然,為了完成的完成整套流程,我們還需要一些相關(guān)的其他依賴,如 MyBatis、PageHelper、Druid 和 MySQL 驅(qū)動:

<!-- SpringBoot整合MyBatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis-starter.version}</version>
</dependency>
<!-- MyBatis分頁插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>${pagehelper-starter.version}</version>
</dependency>
<!-- 集成druid連接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${druid.version}</version>
</dependency>
<!-- Mysql數(shù)據(jù)庫驅(qū)動 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql-connector.version}</version>
</dependency>

注意:上面的 ${} 部分的版本號需要根據(jù)具體項目的實際情況進(jìn)行調(diào)整。

2.2 application 配置

在 Spring Boot 的 application.yml 配置文件中進(jìn)行一些基本的配置,主要包括數(shù)據(jù)源的配置、MyBatis 的相關(guān)配置:

# 配置數(shù)據(jù)源
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/<database>?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: <username>
    password: <password>
# Mybatis 相關(guān)配置
mybatis:
  # 配置映射文件路徑
  mapper-locations:
    - classpath:mapper/*.xml
    - classpath:mbg/mapper/*/*.xml

下面是對上面基本配置的簡單說明:

  • 將上述數(shù)據(jù)源配置中的 <database>、<username><password> 換為你具體的連接信息;
  • 為了便于區(qū)分 MyBatis Generator 自動生成的 mapper.xml 和我們自己手寫的 mapper.xml,我們約定自己寫的映射文件放在 resources/mapper 目錄下,而 MyBatis Generator 自動生成的映射文件放在 resources/mbg/mapper 目錄下。

2.3 添加 Java 配置

為了讓 Spring Boot 能夠自動掃描到生成的 Mapper 接口,我們需要準(zhǔn)備一個配置類通過在 Java 配置類上添加 @MapperScan 注解來指定掃描路徑。

/**
 * MyBatis 配置類(掃描 Mapper 接口)
 */
@MapperScan({"cn.javgo.learningmybatis.mapper","cn.javgo.learningmybatis.mbg.mapper"})
@SpringBootConfiguration
public class MyBatisConfig {
}

注意,上面我們同樣約定自己寫的 Mapper 接口放在 cn.javgo.learningmybatis.mapper 包下,而 MyBatis Generator 自動生成的 Mapper 接口放在 cn.javgo.learningmybatis.mbg.mapper 包下。

2.4 MBG 配置

resources 目錄下準(zhǔn)備一個 generator.properties 配置文件,用于配置數(shù)據(jù)庫連接的基本信息:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/<database>?useSSL=false&serverTimezone=UTC
jdbc.username=<username>
jdbc.password=<password>

注意:你需要將上述數(shù)據(jù)源配置中的 <database>、<username><password> 換為你具體的連接信息。

然后,需要在 resources 目錄下創(chuàng)建一個 MBG 的配置文件 generatorConfig.xml,配置好需要連接的數(shù)據(jù)庫,以及指定生成的實體類、Mapper 接口和 XML 映射文件的位置。

配置文件的具體內(nèi)容根據(jù)實際情況設(shè)置,以下是一個簡單的例子:

<?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>
    <!-- 導(dǎo)入屬性配置 -->
    <properties resource="generator.properties"/>
    <!-- MBG 上下文環(huán)境
        id:上下文環(huán)境唯一標(biāo)識,必須唯一
        targetRuntime:生成的目標(biāo)運行環(huán)境
            MyBatis3:代表生成MyBatis3.x版本的代碼
            MyBatis3Simple:新版本的生成器
            MyBatis3DynamicSql:新版本的生成器
        defaultModelType:生成的默認(rèn)Model類型
            flat:代表生成的Model都是一個個的獨立的類,例如生成Dept類(推薦)
            hierarchical:代表生成的Model類會按照層級進(jìn)行組織,例如生成Dept、DeptMapper、DeptExample三個類
     -->
    <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
        <!-- 配置SQL語句中的前置分隔符 -->
        <property name="beginningDelimiter" value="`"/>
        <!-- 配置SQL語句中的后置分隔符 -->
        <property name="endingDelimiter" value="`"/>
        <!-- 配置生成Java文件的編碼 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!--生成mapper.xml時覆蓋原文件-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
        <!-- 為模型生成序列化方法-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- 為生成的Java模型創(chuàng)建一個toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!--可以自定義生成model的代碼注釋
            type:自定義注釋生成器的類全限定名
        -->
        <commentGenerator type="cn.javgo.learningmybatis.mbg.CommentGenerator">
            <!-- 是否阻止生成的注釋 -->
            <property name="suppressAllComments" value="true"/>
            <!-- 是否阻止生成的注釋包含時間戳 -->
            <property name="suppressDate" value="true"/>
            <!-- 是否添加數(shù)據(jù)庫表的備注信息 -->
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>
        <!-- 配置數(shù)據(jù)庫連接 -->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.connectionURL}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
            <!-- 配置數(shù)據(jù)庫連接的屬性信息
                autoReconnect:是否自動重連
                allowMultiQueries:是否允許執(zhí)行多條SQL語句
                useUnicode:是否使用Unicode字符集
                characterEncoding:設(shè)置字符集編碼
                useSSL:是否使用SSL
                nullCatalogMeansCurrent:是否將null catalog看作當(dāng)前catalog(解決 MySql 8.0 以上版本不生成指定數(shù)據(jù)庫代碼的問題)
             -->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
        <!-- 配置實體類的包名和位置
            targetPackage:生成的實體類存放的包名
            targetProject:生成的實體類存放的位置
        -->
        <javaModelGenerator targetPackage="cn.javgo.learningmybatis.mbg.model" targetProject="src/main/java">
            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="true"/>
            <!-- 是否對model添加構(gòu)造函數(shù) -->
            <property name="constructorBased" value="true"/>
            <!-- 是否對類CHAR類型的列的數(shù)據(jù)進(jìn)行trim操作 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 配置SQL映射文件的包名和位置
            targetPackage:生成的SQL映射文件存放的包名
            targetProject:生成的SQL映射文件存放的位置
         -->
        <sqlMapGenerator targetPackage="cn.javgo.learningmybatis.mbg.mapper" targetProject="src/main/resources">
            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 配置Mapper接口的包名和位置
            type:選擇怎么生成mapper接口(推薦使用XMLMAPPER)
                XMLMAPPER:生成XML對應(yīng)的Mapper接口
                ANNOTATEDMAPPER:生成基于注解的Mapper接口
                MIXEDMAPPER:生成XML對應(yīng)的Mapper接口,同時也生成基于注解的Mapper接口
            targetPackage:生成的Mapper接口存放的包名
            targetProject:生成的Mapper接口存放的位置
         -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.javgo.learningmybatis.mbg.mapper"
                             targetProject="src/main/java">
            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 指定數(shù)據(jù)庫表
            tableName:數(shù)據(jù)庫表名
            domainObjectName:生成的實體類名(默認(rèn)去掉下劃線,駝峰命名)
         -->
        <table tableName="student">
            <!-- 配置自增主鍵
                column:指定獲取自增主鍵的列
                sqlStatement:指定獲取自增主鍵的SQL語句
                identity:指定是否為自增主鍵
             -->
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

上述示例中注釋已經(jīng)很完善了,不再過多解釋,根據(jù)實際需要進(jìn)行調(diào)整即可。

注意:

MyBatis Generator 在運行時會根據(jù)配置文件中指定的路徑生成所需的文件。如果路徑中的目錄已經(jīng)存在,MBG 會直接在其中創(chuàng)建文件。如果路徑中的某個目錄不存在,MBG 會嘗試創(chuàng)建這個目錄。

然而,有一點需要注意:MBG 只會嘗試創(chuàng)建最后一級的目錄,而不會創(chuàng)建整個目錄路徑。 例如,如果配置中的 targetProjectsrc/main/java,而 targetPackagecn.javgo.learningmybatis.mbg.model,則 MBG 會在 src/main/java 目錄下創(chuàng)建 cn/javgo/learningmybatis/mbg/model 目錄。前提是 src/main/java 這個目錄已經(jīng)存在。如果 src/main/java 不存在,MBG 將無法創(chuàng)建文件。

因此,通常我們需要提前創(chuàng)建好 MBG 配置中指定的項目路徑targetProject),這樣 MBG 才能正確生成文件。而對于包路徑(targetPackage),MBG 會自動創(chuàng)建,我們無需手動創(chuàng)建。

如果你想自定義 MBG 生成的代碼,可以自定義一個 CommentGenerator 來繼承 DefaultCommentGenerator 進(jìn)行個性化的定制,這對應(yīng)了上面配置文件中的 commentGenerator 標(biāo)簽部分。

比如我們可以自定義實體類代碼的生成,在實體類代碼上添加 Swagger 注解的支持:

package cn.javgo.learningmybatis.mbg;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;
import java.util.Properties;
/**
 * 自定義注釋生成器
 */
public class CommentGenerator extends DefaultCommentGenerator {
    // 是否添加數(shù)據(jù)庫表的注釋
    private boolean addRemarkComments = false;
    // Example 類名后綴
    private static final String EXAMPLE_SUFFIX = "Example";
    // Mapper 類名后綴
    private static final String MAPPER_SUFFIX = "Mapper";
    // ApiModelProperty 注解類的全限定名(Swagger)
    private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME = "io.swagger.annotations.ApiModelProperty";
    /**
     * 設(shè)置用戶配置的參數(shù)
     * @param properties 用戶配置的參數(shù)
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        // 調(diào)用父類方法保證父類方法可以正常使用
        super.addConfigurationProperties(properties);
        // 從 properties 中獲取 addRemarkComments 參數(shù)值來判斷是否添加數(shù)據(jù)庫表的注釋
        this.addRemarkComments = Boolean.parseBoolean(properties.getProperty("addRemarkComments"));
    }
    /**
     * 給字段添加注釋
     * @param field 字段
     * @param introspectedTable 數(shù)據(jù)庫表
     * @param introspectedColumn 數(shù)據(jù)庫表字段
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        // 獲取數(shù)據(jù)庫表字段的注釋
        String remarks = introspectedColumn.getRemarks();
        // 根據(jù)參數(shù)和備注信息判斷是否添加備注信息
        if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
            // 如果存在特殊字符,需要轉(zhuǎn)義
            if (remarks.contains("\"")) {
                remarks = remarks.replace("\"", "'");
            }
            // 給 model 的字段添加 Swagger 注解
            field.addJavaDocLine("@ApiModelProperty(value = \"" + remarks + "\")");
        }
    }
    /**
     * 給 Java 文件添加注釋
     * @param compilationUnit Java 文件
     */
    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
        // 調(diào)用父類方法保證父類方法可以正常使用
        super.addJavaFileComment(compilationUnit);
        // 獲取 Java 文件的全限定名
        String fullyQualifiedName = compilationUnit.getType().getFullyQualifiedName();
        // 如果不是 Mapper 類或者 Example 類,就添加 Swagger 注解類的導(dǎo)入(因為只有 model 類需要添加 Swagger 注解)
        if (!fullyQualifiedName.contains(MAPPER_SUFFIX) && !fullyQualifiedName.contains(EXAMPLE_SUFFIX)) {
            // 添加 Swagger 注解類的導(dǎo)入
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
        }
    }
}

使用 Swagger 需要在項目的 pom 文件中添加對應(yīng)的依賴:

<!-- Swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>${springfox-swagger.version}</version>
</dependency>

注意,上述 ${springfox-swagger.version} 版本號需要根據(jù)實際情況進(jìn)行選擇。

TIP:

關(guān)于 Swagger API 文檔生成工具的使用請自行閱讀官方文檔或主頁也有對應(yīng)教程,此處不再詳細(xì)展開。

2.5 生成代碼

配置完成后,你可以通過命令行、Maven 插件或者直接使用 Java API 來運行 MBG。

如果是使用 Java API 的方式,我們需編寫一個 Generator 類,完成如下代碼編寫后直接運行 main 方法即可:

package cn.javgo.learningmybatis.mbg;
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.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
 * 通過 Java API 的方式運行 MyBatis Generator
 */
public class Generator {
    public static void main(String[] args) throws Exception {
        // 存儲運行 MBG 時的警告信息
        List<String> warnings = new ArrayList<>();
        // 生成的代碼重復(fù)時,覆蓋原代碼
        boolean overwrite = true;
        // 讀取 MBG 配置文件 generatorConfig.xml
        InputStream inputStream = Generator.class.getResourceAsStream("/generatorConfig.xml");
        // 傳入警告信息創(chuàng)建配置解析器(用于解析 generatorConfig.xml 配置文件)
        ConfigurationParser cp = new ConfigurationParser(warnings);
        // 解析配置文件
        Configuration config = cp.parseConfiguration(inputStream);
        // 關(guān)閉輸入流
        assert inputStream != null;
        inputStream.close();
        // 創(chuàng)建 DefaultShellCallback 對象,用于解決重復(fù)文件覆蓋問題
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        // 創(chuàng)建 MyBatisGenerator 對象,執(zhí)行生成代碼
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        // 執(zhí)行生成代碼
        myBatisGenerator.generate(null);
        // 輸出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

如果使用 Maven 插件,只需要在 pom.xml 中添加以下插件即可:

<!-- MyBatis 生成器 -->
<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.4.0</version>
    <!-- 基本信息配置 -->
    <configuration>
        <!-- MyBatis Generator 配置文件 -->
        <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
        <!-- 允許移動生成的文件 -->
        <overwrite>true</overwrite>
        <!-- 是否自動覆蓋 -->
        <verbose>true</verbose>
    </configuration>
</plugin>

然后運行以下 Maven 命令即可:

$ mvn mybatis-generator:generate

如果是通過命令行的方式,可以運行如下命令,JAR 包需要為具體版本的包,同時提供配置文件:

$ java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml

運行成功后,你會在指定的包中看到生成的代碼結(jié)構(gòu)信息:

可以查看 MBG 生成的 StudentMapper 接口,發(fā)現(xiàn)已經(jīng)包含了基本的 CRUD 方法,具體 SQL 實現(xiàn)也已經(jīng)在 mapper.xml 中生成了,單表 CRUD 直接調(diào)用對應(yīng)方法即可滿足日常需求。同時,生成的代碼中你還會發(fā)現(xiàn)有一個對應(yīng)的 StudentExample 類,可以將其理解為一個條件構(gòu)造器,用于構(gòu)建 SQL 語句中的各種條件。

2.6 基本 CRUD 操作

基于上述生成的代碼,我們的持久層任務(wù)也就完成了,接下來只需要編寫對應(yīng)的控制層和業(yè)務(wù)邏輯層進(jìn)行合理的調(diào)用即可。例如下面是一個對應(yīng)的 StudentServiceImpl 業(yè)務(wù)邏輯層實現(xiàn)類:

/**
 * 學(xué)生業(yè)務(wù)實現(xiàn)類
 */
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;
    @Override
    public void save(Student student) {
        studentMapper.insert(student);
    }
    @Override
    public void update(Student student) {
        studentMapper.updateByPrimaryKeySelective(student);
    }
    @Override
    public void delete(Long id) {
        studentMapper.deleteByPrimaryKey(id);
    }
    @Override
    public Student select(Long id) {
        return studentMapper.selectByPrimaryKey(id);
    }
    @Override
    public List<Student> selectAll(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return studentMapper.selectByExample(new StudentExample());
    }
}

3.進(jìn)階使用 MyBatis Generator

除了上述的基本單表 CRDU 外,我們還可以通過諸如構(gòu)造條件、子查詢、分組、連接和使用高級映射等方式來利用好 MyBatis Generator。

在開始之前,我們先介紹一下 Example 類。MyBatis Generator (MBG) 為每個數(shù)據(jù)庫表生成了一個對應(yīng)的 Example 類。Example 類是一個很強(qiáng)大的工具,它主要用于生成動態(tài) SQL 語句。

Example 類允許你構(gòu)建復(fù)雜的 WHERE 子句,而無需直接在 mapper 文件中硬編碼 SQL,它包含了很多用于構(gòu)建 WHERE 子句的方法。每個方法都對應(yīng)一個 SQL 比較運算符,比如 “=”, “<>”, “>”, “<”, “LIKE” 等。你可以動態(tài)地添加、修改或刪除查詢條件。使用 Example 類,你可以構(gòu)建幾乎任何類型的查詢,包括帶有 ANDOR 子句的查詢,帶有子查詢的查詢等。

在使用 Example 類時,你需要創(chuàng)建一個 Example 對象,然后通過調(diào)用該對象的 createCriteria() 方法創(chuàng)建一個 Criteria 對象。然后你可以在 Criteria 對象上調(diào)用各種方法來添加查詢條件。

3.1 基于條件的 CRUD

條件查詢、條件修改和條件刪除都可以通過 Example 類來實現(xiàn),每個生成的映射器都有一個相應(yīng)的 Example 類。例如,對于我們上面測試的 Student 表,MBG 會生成一個 StudentExample 類。

我們可以通過創(chuàng)建一個 StudentExample 對象,并添加條件來進(jìn)行查詢,修改或刪除。

例如,要查詢 ID 大于 10 的用戶,你可以這樣做:

@Override
public List<Student> selectByCondition() {
    // 構(gòu)建一個 Example 對象
    StudentExample example = new StudentExample();
    // 添加條件
    example.createCriteria().andIdGreaterThan(10L);
    // 執(zhí)行查詢
    return studentMapper.selectByExample(example);
} 

你也可以創(chuàng)建多個 Criteria 對象,并通過 OR 連接它們,來實現(xiàn)更復(fù)雜的查詢。例如,要查詢 ID 大于 10 或?qū)W生姓名為 “john” 的用戶,你可以這樣做:

@Override
public List<Student> selectByCondition() {
    // 構(gòu)建一個 Example 對象
    StudentExample example = new StudentExample();
    // 添加條件
    example.or().andIdGreaterThan(10L);
    example.or().andNameEqualTo("john");
    // 執(zhí)行查詢
    return studentMapper.selectByExample(example);
}

此外,Example 類也支持排序,你可以通過調(diào)用 Example 對象的 setOrderByClause 方法來添加排序條件。例如,要按照 ID 升序查詢用戶,你可以這樣做:

@Override
public List<Student> selectByCondition() {
    // 構(gòu)建一個 Example 對象
    StudentExample example = new StudentExample();
    // 添加條件(desc 降序, asc 升序)
    example.setOrderByClause("id asc");
    // 執(zhí)行查詢
    return studentMapper.selectByExample(example);
}

對于條件修改和刪除,你也可以使用 Example 類。例如,刪除 ID 大于 10 的用戶:

@Override
public void deleteByCondition() {
    // 構(gòu)建一個 Example 對象
    StudentExample example = new StudentExample();
    // 添加條件
    example.createCriteria().andIdGreaterThan(10L);
    // 執(zhí)行刪除
    studentMapper.deleteByExample(example);
}

可見,Example 類是一個非常有用的工具,它可以讓你的 SQL 查詢更加動態(tài)和靈活。

TIP:

但是也需要注意,過度使用 Example 類可能會導(dǎo)致你的代碼變得復(fù)雜和難以理解。因此,對于復(fù)雜的查詢,有時直接編寫 SQL 可能是一個更好的選擇。

3.2 子查詢、Group 與 Join 查詢

MBG 主要用來生成簡單的基于單表的 CRUD 操作的代碼。對于更復(fù)雜的 SQL 操作,比如子查詢、Group 查詢和 Join 查詢,MBG 并不直接支持。這些復(fù)雜查詢需要你自己在 Mapper 的 xml 文件或基于注解編寫相應(yīng)的 SQL。

3.3 一對一查詢、一對多查詢

一對一和一對多查詢在 MBG 中也并不直接支持。一般來說,這兩種查詢都需要你在 Mapper 的 xml 文件中自定義 SQL 來實現(xiàn)。當(dāng)然,你也可以選擇使用基于注解的方式。這在高級查詢一文中我們已經(jīng)進(jìn)行過講解,忘記的回去復(fù)習(xí)以下即可。

到此這篇關(guān)于MyBatis Generator介紹及使用方法的文章就介紹到這了,更多相關(guān)MyBatis Generator內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 方法與數(shù)組基礎(chǔ)使用詳解

    java 方法與數(shù)組基礎(chǔ)使用詳解

    Java語言中的“方法”(Method)在其他語言當(dāng)中也可能被稱為“函數(shù)”(Function),數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java 語言中提供的數(shù)組是用來存儲固定大小的同類型元素
    2022-04-04
  • springboot整合RabbitMQ 中的 TTL實例代碼

    springboot整合RabbitMQ 中的 TTL實例代碼

    TTL 是 RabbitMQ 中一個消息或者隊列的屬性,表明一條消息或者該隊列中的所有消息的最大存活時間,單位是毫秒,這篇文章主要介紹了springboot整合RabbitMQ 中的 TTL,需要的朋友可以參考下
    2022-09-09
  • Java SPEL表達(dá)式注入漏洞原理解析

    Java SPEL表達(dá)式注入漏洞原理解析

    SpEL簡稱Spring表達(dá)式語言,在Spring 3中引入,SpEL能在運行時構(gòu)建復(fù)雜表達(dá)式、存取對象圖屬性、對象方法調(diào)用等等,可以與基于XML和基于注解的Spring配置還有bean定義一起使用,本文給大家介紹Java SPEL表達(dá)式注入漏洞原理研究,感興趣的朋友一起看看吧
    2023-10-10
  • Java如何獲取Date的“昨天”與“明天”示例代碼

    Java如何獲取Date的“昨天”與“明天”示例代碼

    最近在做項目的時候用到Date和Calendar比較多,而且用到的方式也比較全,突然想到一個問題,Java如何獲取Date的"昨天"與"明天",也就是前一天和后一天呢?思考后寫出了方法,想著萬一以后用到,就總結(jié)出來,也方便有需要的朋友們參考借鑒,下面來一起看看吧。
    2016-12-12
  • Java多線程--讓主線程等待所有子線程執(zhí)行完畢在執(zhí)行

    Java多線程--讓主線程等待所有子線程執(zhí)行完畢在執(zhí)行

    Java主線程等待所有子線程執(zhí)行完畢在執(zhí)行,其實在我們的工作中經(jīng)常的用到,本篇文章就介紹了Java多線程--讓主線程等待所有子線程執(zhí)行完畢在執(zhí)行,有需要的可以了解一下。
    2016-11-11
  • intelliJ IDEA 多行選中相同內(nèi)容的快捷鍵分享

    intelliJ IDEA 多行選中相同內(nèi)容的快捷鍵分享

    這篇文章主要介紹了intelliJ IDEA 多行選中相同內(nèi)容的快捷鍵分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結(jié)

    java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結(jié)

    本文主要介紹了java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結(jié),主要包括通過數(shù)據(jù)庫自身實現(xiàn)以及通過mybatisplus的TableField注解添加,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • MyBatis?Generator生成的$?sql是否存在注入風(fēng)險詳解

    MyBatis?Generator生成的$?sql是否存在注入風(fēng)險詳解

    這篇文章主要介紹了MyBatis?Generator生成的$?sql是否存在注入風(fēng)險詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 利用Java中Calendar計算兩個日期之間的天數(shù)和周數(shù)

    利用Java中Calendar計算兩個日期之間的天數(shù)和周數(shù)

    Java 語言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個基本但是非常重要的部分。日期是商業(yè)邏輯計算一個關(guān)鍵的部分。下面這篇文章就給大家介紹了如何利用Java中Calendar計算兩個日期之間的天數(shù)和周數(shù),下面來一起看看吧。
    2016-12-12
  • 基于Springboot+Vue實現(xiàn)的在線答題闖關(guān)系統(tǒng)全過程

    基于Springboot+Vue實現(xiàn)的在線答題闖關(guān)系統(tǒng)全過程

    這篇文章主要介紹了基于Springboot+Vue實現(xiàn)的在線答題闖關(guān)系統(tǒng)的相關(guān)資料,文中包括前端Vue.js、后端SpringBoot及MySQL數(shù)據(jù)庫的使用,系統(tǒng)功能涵蓋順序出題、體型練習(xí)、隨機(jī)出題、錯題本、收藏題和答題統(tǒng)計等,需要的朋友可以參考下
    2024-12-12

最新評論