Mybatis-Plus---快速入門

簡介:

   MyBatis-Plus(簡稱 MP)是一個 MyBatis 的加強工具,在 MyBatis 的基礎上只作加強不作改變,爲簡化開發、提升效率而生。html

1.特性:

  • 無侵入:只作加強不作改變,引入它不會對現有工程產生影響,如絲般順滑
  • 損耗小:啓動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操做
  • 強大的 CRUD 操做:內置通用 Mapper、通用 Service,僅僅經過少許配置便可實現單表大部分 CRUD 操做,更有強大的條件構造器,知足各種使用需求
  • 支持 Lambda 形式調用:經過 Lambda 表達式,方便的編寫各種查詢條件,無需再擔憂字段寫錯
  • 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分佈式惟一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類便可進行強大的 CRUD 操做
  • 支持自定義全局通用操做:支持全局通用方法注入( Write once, use anywhere )
  • 內置代碼生成器:採用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
  • 內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操做,配置好插件以後,寫分頁等同於普通 List 查詢
  • 分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB二、H二、HSQL、SQLite、Postgre、SQLServer 等多種數據庫
  • 內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啓用該功能,能快速揪出慢查詢
  • 內置全局攔截插件:提供全表 delete 、 update 操做智能分析阻斷,也可自定義攔截規則,預防誤操做

2.支持數據庫:

  mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserverjava

3.框架結構

image.png

快速開始[SpringBoot工程]

1.添加依賴[最新版本]

<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>3.3.1.tmp</version>
</dependency>

2.引入數據庫的配置[Mysql]

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://rm-bp12i2og5710db9v75o.mysql.rds.aliyuncs.com:3306/cg_engine_test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=true&useSSL=false&serverTimezone=Asia/Shanghai
      username: account01
      password: Hzga@1234

3.引入mybatis-plus特性配置

# mybatis-plus相關配置
mybatis-plus:
  # xml掃描,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應的 XML 文件位置)
  mapper-locations: classpath:mybatis/*.xml
  # 如下配置均有默認值,能夠不設置
  global-config:
    db-config:
      #主鍵類型 AUTO:"數據庫ID自增" INPUT:"用戶輸入ID",ID_WORKER:"全局惟一ID (數字類型惟一ID)", UUID:"全局惟一ID UUID";
      id-type: auto
      #字段策略 IGNORED:"忽略判斷"  NOT_NULL:"非 NULL 判斷")  NOT_EMPTY:"非空判斷"
      field-strategy: NOT_EMPTY
      #數據庫類型
      db-type: MYSQL
      #邏輯刪除標識
      logic-delete-value: 0
      #非邏輯刪除
      logic-not-delete-value: 1
  configuration:
    # 是否開啓自動駝峯命名規則映射:從數據庫列名到Java屬性駝峯命名的相似映射
    map-underscore-to-camel-case: true
    # 若是查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
    call-setters-on-nulls: true
    # 這個配置會將執行的sql打印出來,在開發或測試的時候能夠用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #設置別名
  type-aliases-package: com.aliyun.mybatis.dao

4.在 Spring Boot 啓動類中添加 @MapperScan 註解,掃描 Mapper 文件夾

@SpringBootApplication
@MapperScan(basePackages = {"com.aliyun.mybatis.dao"})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

5.編寫對應的關係實體[常見的註解]

@Data
@AllArgsConstructor
@ToString
@EqualsAndHashCode
//指定對應的映射表
@TableName("user_info")
public class UserInfo {
    //指定主鍵類型
    @TableId(type = IdType.AUTO)
    private Long id;

    private String userId;

    private Long tbUserId;

    private String userName;

    private String userMobile;

    private String address;

    private Date gmtCreate;

    private Date gmtModified;

    private Double totalCharityHours;

    private Integer userRank;

    private String avatar;
}

6.編寫mapper

@Mapper
@Repository
public interface UserInfoDao extends BaseMapper<UserInfo> {
}

7.編寫測試類運行

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = DemoApplication.class)
class DemoApplicationTests {

    @Autowired
    private UserInfoDao userInfoDao;

    @Test
    public void test() {
        UserInfo userInfo = userInfoDao.selectById(11);
        System.out.println();
    }
}

8.Chain 調用方式:

image.png

實踐樣例:

樣例1.@TableFiedl(fill = FiedlFill.填充策略)

    image.png

     1.1.在使用的字段上加上註解

@TableField(fill = FieldFill.INSERT) // 建立時間只在添加是填充
private Date gmtCreate;
 
@TableField(fill = FieldFill.INSERT_UPDATE) // 更新時間在添加和更新時都填充
private Date gmtModified;

     1.2.自定義類實現MetaObjectHandler類便可,重寫填充策略的兩個方法用於insertupdate,關鍵的是setFieldValByName()方法,第一個參數是實體的屬性,第二個參數是設置的默認值

@Component
public class MetaObjectHandlerConfig implements MetaObjectHandler {
 
    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("gmtCreate", new Date(), metaObject);
        setFieldValByName("gmtModified", new Date(), metaObject);
    }
 
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified",new Date(), metaObject);
    }
}

實例2:mybatis-plus配合分頁插件實現多租戶場景

Mybatis-plus配置文件[配置項相關]

這裏主要介紹的是springboot的.yml配置文件的方式,這部分的配置主體結構大概以下:mysql

mybatis-plus:
  ......
  configuration:
    ......
  global-config:
    ......
    db-config:
      ......

那咱們也把分爲4個部分來介紹git

A:其中經常使用的配置有mapper-locations、type-aliases-package

mybatis-plus:
  # Mybatis的核心配置文件位置
  config-location: classpath:mybatis-config.xml
  # 指定外部化 MyBatis Properties 配置,經過該配置能夠抽離配置,實現不一樣環境的配置部署
  configuration-properties: classpath:mybatis-config.properties
  # Mapper對應的xml文件掃描,多個目錄用逗號或者分號分隔
  mapper-locations: classpath*:/mapper/**/*Mapper.xml
  # MyBaits 別名包掃描路徑,經過該屬性能夠給包中的類註冊別名,註冊後在 Mapper 對應的 XML 文件中能夠直接使用類名,而不用使用全限定的類名(即 XML 中調用的時候不用包含包名)
  type-aliases-package: com.ck.**
  # 該配置請和 typeAliasesPackage 一塊兒使用,若是配置了該屬性,則僅僅會掃描路徑下以該類做爲父類的域對象
  type-aliases-super-type: java.lang.Object
  # 枚舉類 掃描路徑,若是配置了該屬性,會將路徑下的枚舉類進行注入,讓實體類字段可以簡單快捷的使用枚舉屬性
  type-enums-package: com.baomidou.mybatisplus.samples.quickstart.enums
  # 啓動時是否檢查 MyBatis XML 文件的存在,默認不檢查
  check-config-location: true
  # SIMPLE:該執行器類型不作特殊的事情,爲每一個語句的執行建立一個新的預處理語句,REUSE:該執行器類型會複用預處理語句,BATCH:該執行器類型會批量執行全部的更新語句
  default-executor-type: REUSE

B:經常使用的配置有map-underscore-to-camel-case、cache-enabled、jdbc-type-for-null、log-impl,

configuration:
    # 配置返回數據庫(column下劃線命名&&返回java實體是駝峯命名),自動匹配無需as(沒開啓這個,SQL須要寫as: select user_id as userId)
    map-underscore-to-camel-case: true
    # 全局地開啓或關閉配置文件中的全部映射器已經配置的任何緩存,默認爲 true
    cache-enabled: false
    # 懶加載
    aggressive-lazy-loading: true
    # NONE:不啓用自動映射 PARTIAL:只對非嵌套的 resultMap 進行自動映射 FULL:對全部的 resultMap 都進行自動映射
    auto-mapping-behavior: partial
    # NONE:不作任何處理 (默認值)WARNING:以日誌的形式打印相關警告信息 FAILING:看成映射失敗處理,並拋出異常和詳細信息
    auto-mapping-unknown-column-behavior: none
    # 若是查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
    call-setters-on-nulls: true
    # 配置JdbcTypeForNull, oracle數據庫必須配置
    jdbc-type-for-null: "null"
    # 這個配置會將執行的sql打印出來,在開發或測試的時候能夠用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

C:常配置db-config

global-config:
    # 是否控制檯 print mybatis-plus 的 LOGO
    banner: true
    # 機器 ID 部分(影響雪花ID)
#    worker-id:
    # 數據標識 ID 部分(影響雪花ID)(workerId 和 datacenterId 一塊兒配置才能從新初始化 Sequence)
#    datacenter-id:

D:經常使用db-type

db-config:
      #表名下劃線命名默認true
      table-underline: true
      #id類型
      id-type: auto
      #是否開啓大寫命名,默認不開啓
      #capital-mode: false
      #邏輯已刪除值,(邏輯刪除下有效) 須要注入邏輯策略LogicSqlInjector 以@Bean方式注入
      logic-not-delete-value: 0
      #邏輯未刪除值,(邏輯刪除下有效)
      logic-delete-value: 1
      #數據庫類型 這個屬性沒什麼用 數據庫類型,默認值爲未知的數據庫類型 若是值爲OTHER,啓動時會根據數據庫鏈接 url 獲取數據庫類型;若是不是OTHER則不會自動獲取數據庫類型
      db-type: mysql
      # IGNORED    忽略判斷 NOT_NULL 非NULL判斷  NOT_EMPTY 非空判斷(只對字符串類型字段,其餘類型字段依然爲非NULL判斷)  DEFAULT    追隨全局配置 相似的還有update-strategy、select-strategy等
      insert-strategy: not_null

複雜的條件構造器

 a.使用自定義wrapper實現sql查詢

image.png

b.自定義實現分頁查詢功能(IPage已封裝)

image.png

經常使用的Idea插件

1.Free Mybatis plugin:快速引導與定位

image.png

2.RestfulToolkit 服務開發輔助工具集(相似於Postman)

image.png

相關文章
相關標籤/搜索