給mybatis插上快速開發的翅膀

spring-boot-starter-dao是基於spring-boot開箱即用原則,集成了mybatis,通用mapper,pagehelper,druid的dao層庫。致力於降低數據層的開發複雜度,讓mybatis配置徹底告別xml,讓基於mybatis的開發嵌入jpa的身影,極大降低mybatis的入門門檻,也極大的增加mybatis的可用性,減少重複代碼的工作量。讓mybatis新手使用mybatis輕輕鬆鬆,讓mybatis老手開發效率和編碼質量更上一層樓。

spring-boot-starter-dao項目特點:

1. 配置及其簡單,非常容易上手;
2. 支持讀寫分離;
3. 支持多數據源;
4. 支持註解方式指定枚舉與數據庫存儲值的對應;
5. 基於通用mapper快速實現單表的增刪查改;
6. 基於pagehelper便捷易用的數據庫物理分頁實現;
7. 基於druid的服務器監控。
8. 可以根據數據庫表以及表中字段註釋,生成帶完整註釋的model,生成基於通用mapper的dao層

快速開始

1.項目依賴

在spring-boot項目中引入依賴

        <dependency>
            <groupId>com.gitee.reger</groupId>
            <artifactId>spring-boot-starter-dao</artifactId>
            <version>${spring-boot-starter-dao.version}</version>
        </dependency>

如果需要快速生成dao,model,mapper另外還需要引入依賴

        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
            <optional>true</optional>  <!-- 打包時該jar包不需要被打包 -->
        </dependency>

2. 配置項目

在spring-boot的application.yml 配置文件中增加配置項

druid監控配置

spring:
  druid:
    stat:
      enable: true                        # 啓用druid監控控制檯,在web項目中,該值設置爲true,纔會啓用druid監控
      allow: ''                           # IP白名單 (沒有配置或者爲空,則允許所有訪問)
      deny: ''                            # IP黑名單 (存在共同時,deny優先於allow)
      loginUsername: 'leige'              # 用戶名
      loginPassword: 'leige'              # 密碼
      exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*' # WebStatFilter忽略資源
      resetEnable: false                  #禁用HTML頁面上的“Reset All”功能
      filter-url-patterns: '/*'

druid連接池默認配置項

spring:
  druid:  
    default:                              # druid連接池默認參數,具體主庫或者從庫的配置會繼承該配置
      enable: true
      initial-size: 5                     # 鏈接池初始化大小
      max-active: 500                     # 鏈接池中最大的鏈接數
      min-idle: 5                         # 鏈接池中最少要保留的鏈接數
      max-wait: 3000                      # 鏈接池中最大等待的鏈接數
      filters: wall,stat                  # 啓用過濾器
      username: reger                     # 數據庫登陸名
      password: reger_123                 # 數據庫登陸密碼
      default-auto-commit: true           # 是否自動提交事務,如果設置爲false,代碼中不啓用事務數據將沒法持久化

mybatis配置參數

spring:
  mybatis:
    configuration:                        # mybatis具體的配置參數,所有的mybatis實例都會使用該配置
      cache-enabled: true                 # 是否啓用緩存
      local-cache-scope: session          # 緩存範圍
      lazy-loading-enabled: true          # 是否啓用懶加載
      default-executor-type: simple       # sql執行模式
      map-underscore-to-camel-case: true  # 開啓駝峯轉換

mybatis數據源配置

spring:
  mybatis:
    nodes:
      user:                                                       # 該數據源的名字,可以配置多個數據源
        order: after                                              # mybatis生成主鍵的順序,如果要在insert into 數據前獲得主鍵,配置爲 BEFORE,否則配置爲 AFTER 默認值爲 BEFORE
        mapper: MYSQL                                             # mybatis通用mapper使用的mapper接口集合,mysqldb時使用使用 MYSQL,SqlServer 時使用MSSQL,其它db類型時使用DEFAULT, 默認值是 DEFAULT
        primary: false                                            # 是否是默認的數據對象, 最多隻有一個爲true,如果配置多個只有第一個生效
        base-package: com.reger.test.user.dao                     # mybatis mapper接口文件的配置位置,該值不可以爲空,可以用正則匹配,多個用逗號分隔
        mapper-package: com.reger.test.user.mapper                # mybatis mapper 的xml配置文件的位置 ,該值最好不要爲空,可以用正則匹配,多個用逗號分隔
        type-aliases-package: 'com.reger.test.user.model'         # model類所在的包,該值可以爲空,可以用正則匹配,多個用逗號分隔
        master:                                                   # 主庫配置,不可爲空,參數默認繼承spring.druid.default,可以寫參數覆蓋默認配置
          url: jdbc:mysql://127.0.0.1:3306/user?useSSL=true       # 主庫的jdbc地址
        slaves:                                                   # 從庫配置,可以爲空,可以配置多個,參數默認繼承spring.druid.default,可以寫參數覆蓋默認配置
          - url: jdbc:mysql://127.0.0.1:3307/user?useSSL=true
          - url: jdbc:mysql://127.0.0.1:3308/user?useSSL=true
          - url: jdbc:mysql://127.0.0.1:3309/user?useSSL=true

配置項至此完畢

3.快速生成dao,model,代碼

3.1 添加生成代碼需要的配置文件

resources 目錄增加配置文件generator.properties,編寫文件內容如下

mybatis.nodeName=message       # 數據源結點的名字,必須配置
# extend 
extends.modelClass=            # 生成的model希望繼承的基類,如果不寫將繼承java.long.Object
extends.mapperInterface=       # 生成dao接口希望繼承的接口,如果不寫將不會繼承

# java config
java.delimiter=`               # 指明數據庫的用於標記數據庫對象名的符號,比如ORACLE就是雙引號,MYSQL默認是`反引
java.encoding=utf-8            # 代碼編碼,如果不寫,默認utf-8

# generator table config
table.primarykey=id            # 生成表的主鍵id
table.columnMatch= ^           # 匹配的表中列,可以匹配去除列前綴,如^[idcb],會去除列首的字符i,d,c,b

table.tableName=%              # 需要生成的表面,可以用%匹配多個,但建議每次只生成一個
table.tableModl=               # 生成表的model名字,如果表名匹配多個時,該字段必須爲空

# generator package config
package.model=                 # 生成的model存放的包路徑,如果爲空將使用數據源節點下對應包路徑下的第一個完整包路徑
package.repo=                  # 生成的mapper接口存放的包路徑,如果爲空將使用數據源節點下對應包路徑下的第一個完整包路徑
package.mapper=                # 生成的mapper的xml存放的包路徑,如果爲空將使用數據源節點下對應包路徑下的第一個完整包路徑
3.2 生成代碼

以Application方式啓動項目,選擇包含main方法的com.reger.mybatis.generator.GeneratorMain,運行。
稍等,如果沒有出現異常,基本就生成好了你數據表的對應的包括中文註釋的dao,mapper,model。

4.讀寫分離實現

讀寫分離有兩種方式分別是,

4.1 基於註解

你可以在service方法上加註解@DataSourceChange(slave=false) ,讓方法調用過程在主庫查詢,也可以@DataSourceChange(slave=true) ,讓方法調用過程在從庫查詢

4.2 基於java

你可以在方法調用時通過Proxy.master(() -> { 方法調用過程 return null; }); ,讓方法調用過程在主庫查詢,也可以Proxy.slave(() -> { 方法調用過程 return null; }); ,讓方法調用過程在從庫查詢

注意數據更新操作,必須在主庫執行,從庫都是隻讀的

5. 基於註解,實現枚舉到數據庫字段的映射

創建枚舉如下

import com.reger.datasource.annotation.EnumTypeHandler;
@EnumTypeHandler(field= "intCode")// 設置枚舉在數據庫保存的值
public enum State {
    delete(-1), disable(0), enable(1);
    private final int intCode;
    private State(final int code) {
        this.intCode=code;
    }
}

給枚舉添加註解@EnumTypeHandler(field= "intCode") ,這樣在持久化到數據庫,或者查詢出來時,就會用intCode 來轉化枚舉,保存到數據庫的就是-1,0,1。這裏的field除了自己定義的以外,枚舉還默認有name,ordinal 可用。

相關資源

spring-boot-starter-dao git地址
通用mapper
pagehelper

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章