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

SpringBoot3快速整合MyBatisPlus的示例代碼

 更新時間:2024年12月03日 10:18:39   作者:曹申陽  
本文介紹了快速整合MyBatis-Plus到Spring Boot 3項目中,包括依賴引入、代碼生成器使用等,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

MyBatis 最佳搭檔,只做增強不做改變,為簡化開發(fā)、提高效率而生。 這個發(fā)展到目前階段已經(jīng)很成熟了,社區(qū)也比較活躍,可以放心使用。官網(wǎng)地址:https://baomidou.com

二、快速開始

引入依賴

這里我引入了核心 starter 依賴,以及官方提供的代碼生成器依賴,如果你不用代碼生成器可以不引用

<properties>
  <mybatis-plus.version>3.5.7</mybatis-plus.version> <!-- mybatis增強 orm 框架 -->
</properties>

<dependencies>
  <!--   mybatis-plus 相關(guān)依賴   -->
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
      <version>${mybatis-plus.version}</version>
  </dependency>
  <!-- 代碼生成器 -->
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>${mybatis-plus.version}</version>
  </dependency>
  <!--  mysql 依賴 版本由繼承的 spring-boot-starter-parent 控制,也可以自己指定  -->
  <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
  </dependency>
</dependencies>

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

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/itshare-dev?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true
    username: root
    password: root

這樣整合就完成了,接下來就可以編寫我們的業(yè)務(wù)代碼了。

三、業(yè)務(wù)開發(fā)

使用 mybatis-plus 的基本開發(fā)流程一般是這樣的,他和一些全自動的 ORM 框架還是有點區(qū)別的,比如 SpringDataJPA 或者 Hibernate 并不能根據(jù)實體對象自動執(zhí)行 ddl 創(chuàng)建表結(jié)構(gòu)(現(xiàn)在可以通過插件做到,這里我們不深究),一般都是通過先有表,再有實體對象

通常是:

創(chuàng)建數(shù)據(jù)表 -> 代碼生成器生成基礎(chǔ)類 -> 在這個基礎(chǔ)上開發(fā)業(yè)務(wù)代碼

當然你可以在代碼生成器階段盡可能的抽象出相似的地方,甚至可以生成簡單的 CRUD 代碼,市面上有很多案例可供參考,若依,eladmin 等等。這里我只介紹基礎(chǔ)的 entity、mapper、service 生成。

3.1 創(chuàng)建數(shù)據(jù)表

這里我就不列舉了,根據(jù)你自己業(yè)務(wù)來。

3.2 代碼生成器

引入依賴

<!-- 代碼生成器 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>${mybatis-plus.version}</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
</dependency>

代碼生成工具類

public class CodeGenerator {


    private static final String DB_URL = "jdbc:mysql://localhost:3306/itshare-dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&tinyInt1isBit=false";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    public static void main(String[] args) {

        AtomicReference<String> loadModulePackageName = new AtomicReference<>("");
        // 獲取當前路徑
        String path = System.getProperty("user.dir");
        // &tinyInt1isBit=false
        FastAutoGenerator.create(DB_URL, USERNAME, PASSWORD)
        .globalConfig((scanner, builder) -> {
            // 設(shè)置作者
            builder.author("曹申陽")
            .disableOpenDir()
            .enableSpringdoc() // 如果想用swagger,生成 springdoc 規(guī)范注解 把這個放開
            // 指定輸出目錄
            .outputDir(path + "\\src\\test\\java");
        })
        .dataSourceConfig(builder ->
                          builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                              if (JdbcType.TINYINT == metaInfo.getJdbcType()) {
                                  return DbColumnType.INTEGER;
                              }
                              return typeRegistry.getColumnType(metaInfo);
                          })
                         )
        .packageConfig((scanner, builder) -> {
            loadModulePackageName.set(scanner.apply("請輸入當前父包模塊名稱:"));
            builder.parent("com.yang.itshare") // 設(shè)置父包名
            .moduleName(loadModulePackageName.get()) // 設(shè)置父包模塊名
            .service("service")
            .serviceImpl("service.impl")
            .mapper("mapper")
            .controller("controller")
            .entity("entity")
            // 設(shè)置mapperXml生成路徑
            .pathInfo(Collections.singletonMap(OutputFile.xml, path + "\\src\\main\\resources\\mapper\\" + loadModulePackageName.get()));
        })
        .strategyConfig((scanner, builder) -> {
            // 設(shè)置需要生成的表名
            builder.addInclude(getTables(scanner.apply("請輸入表名,多個英文逗號分隔?所有輸入 all")))
            .addTablePrefix("itshare_") // 設(shè)置過濾表前綴
            .entityBuilder() // 設(shè)置 entity 生成規(guī)則
            .addTableFills(new Column("create_time", FieldFill.INSERT))
            .addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE))
            .logicDeleteColumnName("is_deleted")
            .idType(IdType.AUTO)
            .enableLombok()// lombok 注解
            .controllerBuilder() // 設(shè)置 controller 生成規(guī)則
            .enableRestStyle() // 開啟生成@RestController 控制器
            .build();
        }
                       )
        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默認的是Velocity引擎模板
        .execute();
    }

    /**
     * 處理 all 情況
     */
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}

親測可用,注釋也很清楚,想要自己配置可以參考配置文件 https://baomidou.com/reference/new-code-generator-configuration/

運行測試一下:我習(xí)慣將生成的放在 test 下,然后再復(fù)制到項目下,方便調(diào)試,如果你足夠自信,可以指定到想要的地方,一步到位。

這個時候還差最后一步,開啟 mapper 掃描,就可以正常使用了

@MapperScan("com.yang.itshare.*.mapper")

你可以加在啟動類上,或者其它可以被掃描到的類上,我習(xí)慣加載 mybatis 的插件配置類上,后面會介紹。

四、常用插件功能

4.1 邏輯刪除

配置全局邏輯刪除屬性

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: is_deleted # 全局邏輯刪除字段名
      logic-delete-value: 1 # 邏輯已刪除值
      logic-not-delete-value: 0 # 邏輯未刪除值
  # 打印 sql 日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 配置mapper的掃描,找到所有的mapper.xml映射文件 如果和默認路徑一樣可以不配置
  mapper-locations: classpath*:/mapper/**/*.xml

這里我把常用的也放出來了,日志打印,以及 xml 掃描,我一般就放默認地址,這里不加也可以,防止大家想要修改位置,可以在這里配置路徑。

加邏輯刪除注解

如果你使用的是我上面的代碼生成器代碼,會自動添加注解

否則,需要自己完成這一步。

之后在調(diào)用 mybatis-plus 封裝的查詢以及刪除操作時,會默認加上這個刪除的判斷,比如查詢會過濾掉以刪除的,刪除會變成修改這個刪除標記的狀態(tài)值,并不會真正的刪除。注意,如果是使用自己編寫的 xml 將不會生效。

4.2 自動填充字段

實現(xiàn) MetaObjectHandler

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

@Override
public void insertFill(MetaObject metaObject) {
    log.info("start insert fill ....");
    this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
    this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}

@Override
public void updateFill(MetaObject metaObject) {
    log.info("start update fill ....");
    this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}

實體類上添加注解

如果你使用我上面的代碼生成器,會自動添加,否則要自己指定

4.3 分頁插件和防止全表更新與刪除插件

創(chuàng)建配置類

@Configuration
@MapperScan("com.yang.itshare.*.mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); // 防全表更新與刪除插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setMaxLimit(1000L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor); // 如果配置多個插件, 切記分頁最后添加
        return interceptor;
    }
}

我一般會在這里加上 mapper 的掃描,當然你也可以加在啟動類上

還有很多可用插件,大家根據(jù)需要引入即可 https://baomidou.com/plugins/

五、總結(jié)

這樣我們完成了基本的整合,已經(jīng)可以滿足我們前期的開發(fā)工作。至于一些高級功能,比如 多數(shù)據(jù)源支持,數(shù)據(jù)權(quán)限插件,等等。等我們需要的時候,可以自己查閱官方文檔進行添加,官方文檔寫的很詳細。

到此這篇關(guān)于SpringBoot3快速整合MyBatisPlus的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot3整合MyBatisPlus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論