1. 程式人生 > >springboot整合mybatis-plus,以及mybatis-plus入門使用

springboot整合mybatis-plus,以及mybatis-plus入門使用

mybatis-plus是基於mybatis,相對於mybatis,他有許多特性是比較好用的,比如分頁查詢、表字段自動轉換為實體類屬性等,使用mybatis-plus與Spring Data JPA有點相似的地方,個人覺得mybatis-plus的分頁比JPA的分頁好用。其實在mybatis-plus官網上已經有很詳細的教程了,在這裡寫部落格也是為了自己能夠更好的整理思路。先上一下官網基於springboot教程地址:https://baomidou.oschina.io/mybatis-plus-doc/#/spring-boot

1.新增pom引用

maven的引用很簡單,官方已經給出starter,不需要我們考慮它的依賴關係了,此處使用的是2.3版本。

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

2.配置

官方已經提供了基於springboot的配置,將其拷貝過來放在application.yml中即可使用,此處只是將官方部分的配置刪減過一些。其中column-underline: true特別好用,會自動將下劃線格式的表字段,轉換為以駝峰格式命名的屬性。

mybatis-plus:
  global-config:
    db-config:
      id-type: auto
      field-strategy: not_empty
      #駝峰下劃線轉換
      column-underline: true
      #邏輯刪除配置
      logic-delete-value: 0
      logic-not-delete-value: 1
      db-type: mysql
    refresh: false
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false

3.使用

1.建立實體類,建立實體類與JPA特別相似,其中@TableName註解是為了指定此實體類對應資料庫的哪一張表;@TableId指定的是主鍵,type屬性指定的是該主鍵自增的方式,AUTO代表自增,UUID代表使用UUID增加主鍵;還有一個註解@TableFiled,此註解主要用在非主鍵實體屬性上,下面是官方給出的此註解所有屬性。

描述
value 欄位值(駝峰命名方式,該值可無)
update 預處理 set 欄位自定義注入
condition 預處理 WHERE 實體條件自定義運算規則
el 詳看註釋說明
exist 是否為資料庫表字段( 預設 true 存在,false 不存在 )
strategy 欄位驗證 ( 預設 非 null 判斷,檢視 com.baomidou.mybatisplus.enums.FieldStrategy )
fill 欄位填充標記 ( FieldFill, 配合自動填充使用 )

生成一個實體類例項

@TableName("t_patrol_task")
public class PatrolTaskEntity {

    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;

    private Integer jobId;

   Getter…
   Setter….
}

2.建立mapper,與JPA有相像之處。使用@Mapper為了把mapper這個DAO交給Spring管理,且可以不再寫mapper對映檔案;繼承BaseMapper可以方便使用mybatis-plus方法,泛型需要寫對用的實體類。此處直接使用slelect *  from,mybatis-plus會根據實體類自動駝峰轉下劃線對映到表的欄位中

@Mapper
public interface PatrolTaskMapper extends BaseMapper<PatrolTaskEntity> {

    @Select("select * from t_patrol_task where id = #{id} and deleted_at is null")
    PatrolTaskEntity queryByIdAndDeletedAtIsNull(@Param(“id”) Integer id);
}

4.條件構造器

1.查詢單條資料,非主鍵查詢,只要在一個實體內寫入屬性,然後再用mybatis-plus自帶的selectOne()方法即可查詢(注意:查詢的限制條件必須此條資料是唯一的,不然查詢後會報錯)。個人覺得此種查詢使用不便,不如直接使用nativeSql進行查詢來的利索。

PatrolJobLogEntity jobLogEntity = new PatrolJobLogEntity();
jobLogEntity.setJobId(12);
jobLogEntity.setTaskFinished(30);
patrolJobLogMapper.selectOne(jobLogEntity);

2.查詢數量,含有拼接方式查詢。使用mybatis-plus條件查詢需要使用到EntityWrapper構造器,它能新增查詢的條件,如:.eq("job_id",13)表示查詢job_id=13的記錄,isNull("deleted_at")表示deleted_at必須為null(注意:此處查詢的條件是使用的是資料庫表中的欄位名稱)。

EntityWrapper<PatrolTaskEntity> wrapper = new EntityWrapper<>().eq("job_id",13).isNull("deleted_at");
List<PatrolTaskEntity> tasks = patrolTaskMapper.selectCount(wrapper);

3.查詢列表,與上面基本相同,只不過此處使用的是mybatis-plus的selectList()方法

EntityWrapper<PatrolTaskEntity> wrapper = new EntityWrapper<>().eq("job_id",13).isNull("deleted_at");
List<PatrolTaskEntity> tasks = patrolTaskMapper.selectList(wrapper);

拼接sql查詢方式:

查詢方式

說明

setSqlSelect

設定 SELECT 查詢欄位

where

WHERE 語句,拼接WHERE 條件

and

AND 語句,拼接AND 欄位=

andNew

AND 語句,拼接AND (欄位=)

or

OR 語句,拼接OR 欄位=

orNew

OR 語句,拼接OR (欄位=)

eq

等於=

allEq

基於 map 內容等於=

ne

不等於<>

gt

大於>

ge

大於等於>=

lt

小於<

le

小於等於<=

like

模糊查詢 LIKE

notLike

模糊查詢 NOT LIKE

in

IN 查詢

notIn

NOT IN 查詢

isNull

NULL 值查詢

isNotNull

IS NOT NULL

groupBy

分組 GROUP BY

having

HAVING 關鍵詞

orderBy

排序 ORDER BY

orderAsc

ASC 排序 ORDER BY

orderDesc

DESC 排序 ORDER BY

exists

EXISTS 條件語句

notExists

NOT EXISTS 條件語句

between

BETWEEN 條件語句

notBetween

NOT BETWEEN 條件語句

addFilter

自由拼接 SQL

last

拼接在最後,例如:last("LIMIT 1")

5.分頁

1.新增配置檔案,此處配置檔案表示開啟mybatis-plus分頁功能

@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

2.寫查詢語句,此出的Pagination必須給出,不然無法完成分頁功能。

@Mapper
public interface BannerLogMapper extends BaseMapper<BannerLogEntity> {

    @Select("select * from t_pub_banner_logs")
    List<BannerLogEntity> queryLogByPage(Pagination page);
}

3.進行分頁查詢程式碼塊,只需要將要查詢的第幾頁也頁面大小寫入到Page物件中。然後進行查詢,查詢後分頁屬性(當前頁,總頁數、總條數), 是經過外掛自動回寫到傳入page物件中。

Page<BannerLogEntity> page = new Page<>(pageNo,pageSize);
List<BannerLogEntity> bannerLogs = bannerLogMapper.queryLogByPage(page);
page.getTotal();
page.getCurrent();
page.getPages();

6.其他

關於mybatis-plus其他功能,程式碼生成器、效能分析外掛、執行分析外掛、多資料來源處理等可以自行到官網檢視學習。