MyBatis-Plus 組み込みインターフェイス メソッドの使用法

目次

序文

サービスCRUDインターフェース

1.1 保存

1.2 保存または更新

1.3 削除

1.4 アップデート

1.5 入手

1.6 リスト

総合的な事例


序文

このケースを説明する前に、まずFaker ライブラリについて紹介します。

Faker は、本物のように見える偽のデータを生成するための Python ライブラリです。名前、住所、電話番号、メールアドレス、会社名、役職、日付、時刻など、さまざまな種類のデータを生成できます。

Faker の目的は、開発者がテスト、プロトタイピング、およびデータ分析のために大量の偽データを迅速に生成できるようにすることです。また、ゲーム、ソーシャル ネットワーク、電子商取引 Web サイトで使用するための、より現実的なシミュレーション データを作成するために使用することもできます。

Faker は非常に人気のあるライブラリであり、何百万回もダウンロードされています。Google、Amazon、Microsoft、Netflix など、多くの有名企業で使用されています。

Faker の主な利点は次のとおりです。

  • 使いやすい。 Faker には、開発者が偽のデータを簡単に生成できるシンプルな API があります。
  • カスタマイズ可能。 Faker を使用すると、開発者は生成されたデータを特定のニーズに合わせてカスタマイズできます。
  • 複数の言語をサポートします。 Faker は、英語、スペイン語、フランス語、ドイツ語、中国語を含む複数の言語をサポートしています。
  • 他のライブラリと統合します。 Faker は、SQLAlchemy や Django などの他の Python ライブラリと統合できます。

        Faker は、開発者が偽物だが本物に見える大量のデータを迅速に生成するのに役立つ非常に便利なライブラリです。テスト、プロトタイピング、データ分析、より現実的なシミュレーション データの作成に最適です。

使用:

1. Faker の依存関係をプロジェクトに追加します。

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>1.0.2</version>
</dependency>

2. コードでは、次の方法で Faker インスタンスを作成できます。

Faker faker = new Faker();

3. 次に、Faker を使用してさまざまなタイプのデータを生成できます。たとえば、次のコードを使用して偽の名前を生成できます。

String name = faker.name().fullName();

4. Faker を使用して偽のアドレスを生成できます。

Address address = faker.address();
String streetAddress = address.streetAddress();
String city = address.city();
String state = address.state();
String zipCode = address.zipCode();

         Faker は、電話番号、電子メール アドレス、会社名、役職、日付、時刻など、他の種類のデータの生成もサポートしています。Faker の使用方法の詳細については、Faker の公式ドキュメントを参照してください。

サービスCRUDインターフェース

サービス CRUD インターフェイスの説明:

  • 一般サービス CRUD はIServiceインターフェイスをカプセル化し、混乱を避けるためget 查询单行 remove 删除 list 查询集合 page 分页にレイヤーを区別するプレフィックス命名を使用して CRUD をさらにカプセル化しますMapper

  • T任意のエンティティ オブジェクトの汎用

1.1 保存

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);

パラメータの説明

タイプ パラメータ名 説明する
T 実在物 エンティティオブジェクト
コレクション<T> エンティティリスト エンティティオブジェクトのコレクション
整数 バッチサイズ バッチ数量を挿入

1.2 保存または更新

// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

パラメータの説明

タイプ パラメータ名 説明する
T 実在物 エンティティオブジェクト
ラッパー<T> 更新ラッパー エンティティオブジェクトのカプセル化操作クラスUpdateWrapper
コレクション<T> エンティティリスト エンティティオブジェクトのコレクション
整数 バッチサイズ バッチ数量を挿入

1.3 削除

// 根据 queryWrapper 设置的条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);

パラメータの説明

タイプ パラメータ名 説明する
ラッパー<T> クエリラッパー エンティティラッパークラスQueryWrapper
シリアル化可能 ID 主キーID
マップ<文字列、オブジェクト> コラムマップ テーブルフィールドマップオブジェクト
コレクション<? シリアライズ可能を拡張> idリスト 主キーIDリスト

1.4 アップデート

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);

パラメータの説明

タイプ パラメータ名 説明する
ラッパー<T> 更新ラッパー エンティティオブジェクトのカプセル化操作クラスUpdateWrapper
T 実在物 エンティティオブジェクト
コレクション<T> エンティティリスト エンティティオブジェクトのコレクション
整数 バッチサイズ バッチ数量を更新する

1.5 入手

// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

パラメータの説明

タイプ パラメータ名 説明する
シリアル化可能 ID 主キーID
ラッパー<T> クエリラッパー エンティティオブジェクトのカプセル化操作クラスQueryWrapper
ブール値 スローエクス 複数の結果がある場合、例外がスローされますか?
T 実在物 エンティティオブジェクト
機能<? スーパーオブジェクト、V> マッパー 変換関数

1.6 リスト

// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

パラメータの説明

タイプ パラメータ名 説明する
ラッパー<T> クエリラッパー エンティティオブジェクトのカプセル化操作クラスQueryWrapper
コレクション<? シリアライズ可能を拡張> idリスト 主キーIDリスト
マップ<文字列、オブジェクト> コラムマップ テーブルフィールドマップオブジェクト
機能<? スーパーオブジェクト、V> マッパー 変換関数

        まだ書かれていないMapper CRUDインターフェースがありますが、使い方はほぼ同じです。サービスインターフェースにはメソッド名が異なるほか、例外スローやトランザクションアノテーションがあり、データベースを操作するために一般的に使用されます。

サービスインターフェイスの操作の詳細については、公式 Web サイトを参照してください。

総合的な事例

package com.ycxw.mybatis_test;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.javafaker.Faker;
import com.ycxw.mybatis_test.entity.Book;
import com.ycxw.mybatis_test.mapper.BookMapper;
import com.ycxw.mybatis_test.service.IBookService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Slf4j
@SpringBootTest
class MybatisTextApplicationTests {
    @Autowired
    private IBookService bookService;
    @Autowired
    private BookMapper bookMapper;

    @Test
    void contextLoads() {
    }

    /**
     * 保存单个
     */
    @Test
    public void test01() {
        /*创建faker实例
        参数:指定使用语言和国家*/
        Faker faker = new Faker(new Locale("zh", "CN"));
        /*
          faker.number().randomDouble(x,x,x)
        * 生成一个介于 100 和 999 之间的随机浮点数,并且保留两位小数。
        * */
        Book book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        bookService.save(book);
    }

    /**
     * 保存多个
     */
    @Test
    public void test02() {
        /*
         * Stream.generate方法:创建一个无限流,其中每个元素都是使用提供的lambda表达式生成的。
         * 使用lambda表达式创建一个新的Book对象,并用Faker库生成的随机书名和价格对其进行初始化。
         * limit方法:将流限制为只包含前1000个元素。
         * collect方法:将流收集到一个列表中。
         * */
        Faker faker = new Faker(new Locale("zh", "CN"));
        List<Book> list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.book().title())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(10).collect(Collectors.toList());
        bookService.saveBatch(list);
    }

    @Test
    public void test03() {
        Faker faker = new Faker(Locale.CHINA);
        List<Book> list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.book().title())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(1000).collect(Collectors.toList());
        bookService.saveBatch(list, 500);
    }

    @Test
    public void test04() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        /*条件删除
         * lt小于
         * */
        wrapper.lt("price", 500);
//        wrapper.like("name", "你");
        bookService.remove(wrapper);
    }

    @Test
    public void test05() {
        Map<String, Object> ms = new HashMap<>();
        ms.put("price", 100);
//        ms.put("name", "你");
        bookService.removeByMap(ms);
    }

    @Test
    public void test06() {
        List<Long> ids = bookService
                .list()
                .stream()
                .limit(5)
                .map(Book::getId)
                .collect(Collectors.toList());
        bookService.removeBatchByIds(ids);
    }

    @Test
    public void test07() {
        UpdateWrapper<Book> wrapper = new UpdateWrapper<>();
        wrapper.eq("id", 493587255361727L);
        wrapper.set("name", "jack");
        wrapper.setSql("price=price+1");
        bookService.update(wrapper);
    }

    @Test
    public void test08() {
        Faker faker = new Faker(Locale.CHINA);
        Book Book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        UpdateWrapper<Book> wrapper = new UpdateWrapper<>();
        wrapper.eq("id", 493587255361723L);
        bookService.update(Book, wrapper);
    }

    @Test
    public void test09() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.like("name", "吕");
        wrapper.gt("price", 200);
        bookService.getOne(wrapper);
    }

    @Test
    public void test10() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        /*sql条件加拼接*/
        wrapper.gt("price", 200);
        /*拼接sql到最后*/
        wrapper.last("limit 1");
        bookService.getOne(wrapper);
    }

    @Test
    public void test11() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.gt("price", 200);
        bookService.getOne(wrapper, false);
    }

    @Test
    public void test12() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.gt("price", 200);
        wrapper.last("limit 1");
        bookService.getMap(wrapper).forEach((k, v) -> {
            log.warn("{},{}", k, v);
        });
    }

    @Test
    public void test13() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.gt("price", 200);
        wrapper.last("limit 1");
        bookService.getObj(wrapper, e -> {
            log.warn("{}", e);
            return new Object();
        });
    }

}

おすすめ

転載: blog.csdn.net/Justw320/article/details/135079351