第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

使用 MyBatis-plus

1. 前言

spring-boot 集成 MyBatis小節(jié)中,我們介紹了如何在 spring-boot 中集成 MyBatis,MyBatis 雖然靈活,但是對(duì)于業(yè)務(wù)開發(fā)還略顯不夠。MyBatis-Plus 是國內(nèi)開發(fā)者為 MyBatis 定制的一款增強(qiáng)工具,在不侵入 MyBatis 的基礎(chǔ)上能夠快速地提升 MyBatis 的開發(fā)能力,為開發(fā)者節(jié)省大量的時(shí)間。

提示: 本小節(jié)建立在spring-boot 集成 MyBatis小節(jié)基礎(chǔ)之上,如果你還沒有閱讀該小節(jié),請(qǐng)務(wù)必閱讀了解。

2. 簡介

MyBatis-Plus(簡稱 MP)是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。

MyBatis-Plus 內(nèi)置豐富的基礎(chǔ) mapper 和插件,是目前國內(nèi)使用最為廣泛的開源項(xiàng)目之一。

3. 依賴

在 spring-boot 的基礎(chǔ)上,使用 MyBatis-Plus 也十分簡單,只需在 pom 文件中添加上對(duì)應(yīng)的 starter 即可。

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

4. 準(zhǔn)備

MP 提供了十分方便的 BaseMapper 供項(xiàng)目 mapper 繼承,如下:

package com.imooc.mybatis.springbootmybatisexample.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.imooc.mybatis.springbootmybatisexample.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {

  @Select("SELECT * FROM imooc_user")
  List<User> getUsers();
}

UserMapper 繼承 BaseMapper 后就擁有了基礎(chǔ)的增刪查改功能,而無需寫 SQL。BaseMapper 必須指定一個(gè)與 UserMapper 對(duì)應(yīng)的模型類,即 User 類。

package com.imooc.mybatis.springbootmybatisexample.model;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;

@TableName("imooc_user")
public class User implements Serializable {
  @TableId("id")
  private Long id;
  private String username;
  private Integer age;
  private Integer score;
  // 省略諸多 getter 和 setter 方法
}

在模型類中,我們需要通過 TableName 注解指定模型對(duì)于的數(shù)據(jù)表名稱,并通過 TableId 注解指定數(shù)據(jù)表字段。

并在 SpringbootMybatisExampleApplication 啟動(dòng)類上添加 MapperScan 注解來掃描 mapper,如下:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.imooc.mybatis.springbootmybatisexample.mapper")
public class SpringbootMybatisExampleApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringbootMybatisExampleApplication.class, args);
  }
}

MapperScan 中需填入 mapper 所在的包路徑,即 com.imooc.mybatis.springbootmybatisexample.mapper。

5. 使用

5.1 基礎(chǔ)使用

接下來,我們?cè)?UserController 中來使用增強(qiáng)后的 UserMapper。

package com.imooc.mybatis.springbootmybatisexample.controller;

import com.imooc.mybatis.springbootmybatisexample.mapper.UserMapper;
import com.imooc.mybatis.springbootmybatisexample.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    // return userMapper.getUsers();
    return userMapper.selectList(null);
  }
}

這里,我們替換了之前使用的 getUsers 方法,而是使用了 BaseMapper 提供的 selectList 方法,該方法接收一個(gè)參數(shù),這里我們暫時(shí)定為 null。

運(yùn)行程序,并通過 curl 測(cè)試接口:

# curl 127.0.0.1:8080/user/
[{"id":1,"username":"peter","age":18,"score":100},{"id":2,"username":"pedro","age":24,"score":200},{"id":3,"username":"jerry","age":28,"score":500},{"id":4,"username":"mike","age":12,"score":300}]

我們?nèi)匀蝗〉昧伺c之前一樣的結(jié)果??梢钥吹?,MP 在增強(qiáng) UserMapper 后,我們無需再寫多余的 SQL,MP 自動(dòng)的為我們生成了對(duì)應(yīng)的 SQL 語句。

5.2 進(jìn)階使用

MP 的功能遠(yuǎn)不止如此簡單,我們還可以通過 Java API 給 selectList 函數(shù)傳入 SQL 篩選條件。如,我們只想獲取分?jǐn)?shù)大于 200 分的用戶。

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    QueryWrapper<User> condition = new QueryWrapper<>();
    condition.lambda().gt(User::getScore, 200);
    return userMapper.selectList(condition);
  }
}

QueryWrapper 是 MP 提供的查詢條件包裝器,通過 Java API 的方式我們就可以構(gòu)造 SQL 過濾條件。如這里我們通過 lamdba 表示式構(gòu)造了用戶積分需大于200的過濾條件,然后將包裝器以參數(shù)的形式傳遞給 selectList 函數(shù)。

再次運(yùn)行程序,并通過 curl 測(cè)試接口:

# curl 127.0.0.1:8080/user/
[{"id":3,"username":"jerry","age":28,"score":500},{"id":4,"username":"mike","age":12,"score":300},{"id":5,"username":"tom","age":27,"score":1000}]

從結(jié)果中,可以看出積分小于200的用戶都已經(jīng)被過濾掉了。

5.3 分頁插件

MP 內(nèi)置提供了分頁插件,只需幾行代碼我們就可直接引入。

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

@SpringBootApplication
@MapperScan("com.imooc.mybatis.springbootmybatisexample.mapper")
public class SpringbootMybatisExampleApplication {
  @Bean
  public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
  }
  public static void main(String[] args) {
    SpringApplication.run(SpringbootMybatisExampleApplication.class, args);
  }
}

在 SpringbootMybatisExampleApplication 啟動(dòng)類中,我們添加了一個(gè)帶有 Bean 注解的 paginationInterceptor 方法,該方法返回一個(gè) PaginationInterceptor 對(duì)象,這樣插件就配置完成了。

接下來,我們來使用它。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    Page page = userMapper.selectPage(new Page<>(1, 3), null);
    return page.getRecords();
  }
}

UserMapper 的 selectPage 方法接受兩個(gè)參數(shù),第一個(gè)參數(shù)是分頁配置,第二個(gè)參數(shù)是查詢條件包裝器。這里第一個(gè)參數(shù),我們直接通過 Page 構(gòu)造函數(shù)來構(gòu)造,1 表示當(dāng)前頁,3 表示分頁最大的記錄數(shù),即第一頁且最多返回三條記錄;第二個(gè)參數(shù)我們直接設(shè)置為 null。

運(yùn)行程序,并通過 curl 測(cè)試接口:

# curl 127.0.0.1:8080/user/
[{"id":1,"username":"peter","age":18,"score":100},{"id":2,"username":"pedro","age":24,"score":200},{"id":3,"username":"jerry","age":28,"score":500}]

從結(jié)果可以看出,分頁生效了,記錄總數(shù)卻是為 3 條。

6. 小結(jié)

  • MyBatis-Plus 是國內(nèi)使用十分廣泛的一款 ORM 庫,極大的節(jié)省了開發(fā)者的開發(fā)時(shí)間,功能強(qiáng)大且使用簡單。
  • MyBatis-Plus 的內(nèi)容還是較多的,如果你感興趣,不妨訪問它的官網(wǎng)看一看。