天天看點

從零搭建微服務-系統服務(二)

作者:Java大蝦
從零搭建微服務-系統服務(二)

寫在最前

如果這個項目讓你有所收獲,記得 Star 關注哦,這對我是非常不錯的鼓勵與支援。

源碼位址(後端):gitee.com/csps/mingyu…

源碼位址(前端):gitee.com/csps/mingyu…

文檔位址:gitee.com/csps/mingyu…

Mybatis 相關推薦閱讀

基礎的東西就不再寫了,本架構資料層采用 mybatis
  • MyBatis 入門必讀
  • 【資料篇】SpringBoot 整合 MyBatis 操作 MySql
  • 【資料篇】SpringBoot 整合 MyBatis-Plus 增強 MyBatis ,基友搭配,效率翻倍
  • 【資料篇】SpringBoot 整合 MyBatis-Plus 實作分頁查詢

引入 Mybatis-Plus

修改 mingyue pom

xml複制代碼<!--  mybatis-plus 啟動器  -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>${mybatis-plus.version}</version>
</dependency>

<!--  mybatis-plus 注解  -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-annotation</artifactId>
  <version>${mybatis-plus.version}</version>
</dependency>

<!--  mybatis-plus 代碼生成器  -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>${mybatis-plus.version}</version>
</dependency>
           

修改 mingyue-common-bom pom

xml複制代碼<!-- 系統服務 API 子產品 -->
<dependency>
    <groupId>com.csp.mingyue</groupId>
    <artifactId>mingyue-system-api</artifactId>
    <version>${project.version}</version>
</dependency>
           

修改 mingyue-system-api pom

xml複制代碼<dependencies>
  <!-- mybatis-plus 注解 -->
  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-annotation</artifactId>
  </dependency>
</dependencies>
           

修改 mingyue-system-biz pom

xml複制代碼<dependency>
  <groupId>com.csp.mingyue</groupId>
  <artifactId>mingyue-common-core</artifactId>
</dependency>

<!-- mingyue-system-api -->
<dependency>
  <groupId>com.csp.mingyue</groupId>
  <artifactId>mingyue-system-api</artifactId>
</dependency>

<!--  Mysql 資料庫驅動  -->
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
</dependency>
<!--  mybatis-plus  -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--  mybatis-plus 代碼生成器  -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.3</version>
</dependency>
           

代碼生成器 mybatis-plus-generator

借助代碼生成器可以縮減一些開發時間~

代碼生成

打開 com.csp.mingyue.system.gen.MysqlCodeGenerator 代碼生成類
java複制代碼public static void main(String[] args) {
        FastAutoGenerator.create(
                "jdbc:mysql://mingyue-mysql:3306/mingyue?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true",
                "root", "mingyue")
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("Strive") // 設定作者
                            .commentDate("yyyy-MM-dd hh:mm:ss")   //注釋日期
                            .outputDir(System.getProperty("user.dir") + "/gen/src/main/java") // 指定輸出目錄
                            .disableOpenDir() //禁止打開輸出目錄,預設打開
                    ;
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("com.csp.mingyue.system") // 設定父包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    System.getProperty("user.dir") + "/gen/src/main/resources/mappers")); // 設定mapperXml生成路徑
                })
                // 政策配置
                .strategyConfig(builder -> {
                    builder.addInclude("sys_user") // 設定需要生成的表名
                            //.addTablePrefix("sys_") // 設定過濾表字首
                            // Entity 政策配置
                            .entityBuilder()
                            .enableLombok() //開啟 Lombok
                            .enableFileOverride() // 覆寫已生成檔案
                            .naming(NamingStrategy.underline_to_camel)  //資料庫表映射到實體的命名政策:下劃線轉駝峰命
                            .columnNaming(NamingStrategy.underline_to_camel)    //資料庫表字段映射到實體的命名政策:下劃線轉駝峰命
                            // Mapper 政策配置
                            .mapperBuilder()
                            .enableFileOverride() // 覆寫已生成檔案
                            // Service 政策配置
                            .serviceBuilder()
                            .enableFileOverride() // 覆寫已生成檔案
                            .formatServiceFileName("%sService") //格式化 service 接口檔案名稱,%s進行比對表名,如 UserService
                            .formatServiceImplFileName("%sServiceImpl") //格式化 service 實作類檔案名稱,%s進行比對表名,如 UserServiceImpl
                            // Controller 政策配置
                            .controllerBuilder()
                            .enableFileOverride() // 覆寫已生成檔案
                    ;
                })
                .execute();

    }
           

執行 mian 函數,代碼會生成在根目錄 gen 目錄下,生成代碼結構如下圖:

從零搭建微服務-系統服務(二)

修改實體類包路徑

生成的 SysUser 實體類,包路徑為:com.csp.mingyue.system.entity.SysUser,修改為:com.csp.mingyue.system.api.entity.SysUser,再修改一下其他引入類的路徑即可。

mybatis-plus 配置類

MybatisPlusConfiguration

mingyue-system-biz 添加 MybatisPlusConfiguration 類配置 mybatis-plus 配置,如掃描路徑、分頁插件等
java複制代碼import cn.hutool.core.net.NetUtil;
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * mybatis-plus 配置類
 *
 * @author Strive
 */
@AutoConfiguration
@EnableTransactionManagement(proxyTargetClass = true)
@MapperScan("${mybatis-plus.mapperPackage}")
public class MybatisPlusConfiguration {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分頁插件
        interceptor.addInnerInterceptor(paginationInnerInterceptor());

        return interceptor;
    }

    /**
     * 分頁插件,自動識别資料庫類型
     */
    public PaginationInnerInterceptor paginationInnerInterceptor() {
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        // 設定最大單頁限制數量,預設 500 條,-1 不受限制
        paginationInnerInterceptor.setMaxLimit(-1L);
        // 分頁合理化
        paginationInnerInterceptor.setOverflow(true);
        return paginationInnerInterceptor;
    }

    /**
     * 使用網卡資訊綁定雪花生成器
     * 防止叢集雪花ID重複
     */
    @Primary
    @Bean
    public IdentifierGenerator idGenerator() {
        return new DefaultIdentifierGenerator(NetUtil.getLocalhost());
    }

}
           

META-INF/spring

需要自動導入的類,将包路徑放入 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 檔案中即可(利用的是 SPI 機制)

SPI(Service Provider Interface) 是 JDK 内置的一種服務提供發現機制,可以用來啟用架構擴充和替換元件,主要用于架構中開發,例如 Dubbo、Spring、Common-Logging,JDBC 等采用采用 SPI 機制,針對同一接口采用不同的實作提供給不同的使用者,進而提高了架構的擴充性。

properties複制代碼com.csp.mingyue.system.config.MybatisPlusConfiguration
           

application.yml

後續配置遷移到 nacos
yaml複制代碼# 端口
server:
    port: 8000

spring:
    application:
        name: @artifactId@
    profiles:
        # 環境配置
        active: @profiles.active@
    cloud:
        nacos:
            # nacos 服務位址
            server-addr: @nacos.server@
            username: @nacos.username@
            password: @nacos.password@
            discovery:
                # 注冊組
                group: @nacos.discovery.group@
                namespace: ${spring.profiles.active}
            config:
                # 配置組
                group: @nacos.config.group@
                namespace: ${spring.profiles.active}
    config:
        import:
            - optional:nacos:application-common.yml
            - optional:nacos:${spring.application.name}.yml
    datasource:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: mingyue
        url: jdbc:mysql://mingyue-mysql:3306/mingyue?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true

# MyBatis-Plus 配置
mybatis-plus:
    # 不支援多包, 如有需要可在注解配置 或 提升掃包等級
    # 例如 com.**.**.mapper
    mapperPackage: com.csp.mingyue.**.mapper
    # 對應的 XML 檔案位置
    mapperLocations: classpath*:/mapper/*Mapper.xml
    # 實體掃描,多個package用逗号或者分号分隔
    typeAliasesPackage: com.csp.mingyue.**.domain
    # 啟動時是否檢查 MyBatis XML 檔案的存在,預設不檢查
    checkConfigLocation: false
    configuration:
        # 自動駝峰命名規則(camel case)映射
        mapUnderscoreToCamelCase: true
        # MyBatis 自動映射政策
        # NONE:不啟用 PARTIAL:隻對非嵌套 resultMap 自動映射 FULL:對所有 resultMap 自動映射
        autoMappingBehavior: PARTIAL
        # MyBatis 自動映射時未知列或未知屬性處理策
        # NONE:不做處理 WARNING:列印相關警告 FAILING:抛出異常和詳細資訊
        autoMappingUnknownColumnBehavior: NONE
        # 更詳細的日志輸出 會有性能損耗 org.apache.ibatis.logging.stdout.StdOutImpl
        # 關閉日志記錄 (可單純使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
        # 預設日志輸出 org.apache.ibatis.logging.slf4j.Slf4jImpl
        logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
    global-config:
        # 是否列印 Logo banner
        banner: true
        dbConfig:
            # 主鍵類型
            # AUTO 自增 NONE 空 INPUT 使用者輸入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
            idType: ASSIGN_ID
            # 邏輯已删除值
            logicDeleteValue: 1
            # 邏輯未删除值
            logicNotDeleteValue: 0
            insertStrategy: NOT_NULL
            updateStrategy: NOT_NULL
            where-strategy: NOT_NULL
           

啟動項目

測試接口,發送請求
bash複制代碼curl --location --request GET 'http://127.0.0.1:8000/sysUser/getSysUsers' \
--header 'User-Agent: Apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8000' \
--header 'Connection: keep-alive'
           
接口傳回:
json複制代碼{
    "code": 200,
    "msg": "操作成功",
    "data": [
        {
            "userId": 1,
            "username": "mingyue",
            "nickname": "明月",
            "sex": "0",
            "password": "123456",
            "phone": "13260718262",
            "email": null,
            "avatar": null,
            "lockFlag": "0",
            "delFlag": "0",
            "createTime": null,
            "updateTime": null,
            "createBy": null,
            "updateBy": null
        }
    ]
}
           

小結

下一篇準備優化一下代碼結構,豐富一下接口(使用者名查找使用者資訊接口),預備給 mingyue-auth 認證中心 使用。

原文連結:https://juejin.cn/post/7241495840556187709

繼續閱讀