熱すぎる!MyBatis Plusがとても素晴らしいのはなぜですか?

  • 特徴

  • テキスト

  • コンポーネントの依存関係

  • 拡張コード

MyBatis-Plus(略してMP)を使用したことのある人なら誰でも、MyBatisの拡張ツールであることを知っています。変更を加えずにMyBatisを拡張することに専念しています。開発を簡素化し、効率を向上させるために生まれました。

特徴

  • 侵入なし:変更を加えずに拡張を行うだけで、その導入は既存のプロジェクトに影響を与えず、シルクのように滑らかです

  • 低損失:基本的なCURDは起動時に自動的に注入され、パフォーマンスは基本的に損失なし、直接オブジェクト指向の操作

  • 強力なCRUD操作:組み込みの一般的なマッパーと一般的なサービス、わずかな構成で単一のテーブルのほとんどのCRUD操作を実現でき、さまざまなニーズを満たし、272ページのMybatisPDFドキュメント整理できるより強力な条件ビルダー

  • Lambdaフォーム呼び出しのサポート:Lambda式を使用すると、さまざまなクエリ条件を記述できるので便利です。間違ったフィールドを書き込むことを心配する必要はありません。

  • プライマリキーの自動生成をサポート:最大4つのプライマリキー戦略(分散された一意のIDジェネレータ-シーケンスを含む)をサポートします。これは、プライマリキーの問題を完全に解決するように自由に構成できます。

  • ActiveRecordモードのサポート:ActiveRecordフォーム呼び出しをサポートします。エンティティクラスは、強力なCRUD操作を実行するためにModelクラスを継承するだけで済みます。

  • カスタムグローバル一般操作のサポート:グローバル一般メソッドインジェクションのサポート(1回書き込み、どこでも使用)

  • 組み込みのコードジェネレーター:コードまたはMavenプラグインを使用して、マッパー、モデル、サービス、コントローラーレイヤーコード、サポートテンプレートエンジン、および使用するその他のカスタム構成をすばやく生成します

  • 組み込みのページングプラグイン:MyBatisの物理ページングに基づいているため、開発者は特定の操作を気にする必要がありません。プラグインを構成した後、ページングを作成することは通常のリストクエリと同等です。

  • ページングプラグインは複数のデータベースをサポートします:MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServerおよびその他のデータベースをサポートします

  • 組み込みのパフォーマンス分析プラグイン:Sqlステートメントとその実行時間を出力できます。開発およびテスト中にこの機能を有効にして、遅いクエリをすばやく検出することをお勧めします。

  • 組み込みのグローバルインターセプトプラグイン:テーブル全体の削除および更新操作のインテリジェントな分析とブロックを提供し、インターセプトルールをカスタマイズして誤操作を防ぐこともできます

テキスト

実際のプロジェクト開発では、データをバッチでデータベースに保存する必要があることがよくありますが、mybatis-plusで多かれ少なかれ実現しましたか?

コンポーネントの依存関係

まず、Mavenを介してmybatis-plusオープンソースコンポーネントを導入し、pom.xmlファイルに次のコードを追加する必要があります。

<!--mybatis-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>
<!--mybatis plus extension,包含了mybatis plus core-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.0</version>
</dependency>

ソースコードを表示すると、APIインターフェイスによって提供されるバッチ挿入インターフェイスが見つかりました。

熱すぎる! MyBatis Plusがとても素晴らしいのはなぜですか?
サービスを開始した後、Postmanを使用してデバッグすると、バックグラウンド印刷は次のようになります。

熱すぎる! MyBatis Plusがとても素晴らしいのはなぜですか?

この図から、このいわゆるバッチ挿入インターフェイスは実際にはforループ挿入であることがわかります。ああ、私の神様!は単なる悪夢です。

手動で実装するのは難しいので、

INSERT INTO test (a, b, c) VALUES
<foreach collection="list" item="item" separator=",">
    (#{item.a}, #{item.b}, #{item.c})
</foreach>

mybatis-plusのソースコードを読み取ります。com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumnパッケージには、実際にはバッチ挿入コードの実装があります。ここではソースコードを投稿せず、自分でフォローします。手動で拡張しましょう。少し:

拡張コード

話は安いです、コードを見せてください最初にコードを見せてくださいそれからこれがなぜ行われるのかゆっくりお見せします:

熱すぎる! MyBatis Plusがとても素晴らしいのはなぜですか?

BeanをMybatisPlusConfigファイルに挿入します。コードは次のとおりです。

@Configuration
public class MybatisPlusConfig {

    /**
     * 分页插件
     *
     * @return PaginationInterceptor
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    @Bean
    public EasySqlInjector easySqlInjector() {
        return new EasySqlInjector();
    }
}

また、組み込みのBaseMapperを拡張すると、コードは次のようになります。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.Collection;

/**
 * 扩展通用 Mapper,支持数据批量插入
 *
 * @author 天开易想
 */
public interface EasyBaseMapper<T> extends BaseMapper<T> {

    /**
     * 批量插入 仅适用于mysql
     *
     * @param entityList 实体列表
     * @return 影响行数
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);
}

ビジネスクラスに次の参照を実装できます。コードは次のとおりです。

/**
 * 定义业务mapper接口,继承刚刚扩展的EasyBaseMapper
 *
 * @author 天开易想
 */
@Mapper
public interface TestMapper extends EasyBaseMapper<Test> {
}

/**
 * 业务实现类接口,即可引用
 *
 * @author 天开易想
 */
@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {

    @Override
    public Integer testBatch(Collection<Test> testList) {
        return baseMapper.insertBatchSomeColumn(testList);
    }

BaseMapperで直接引用できないのに、なぜ直接引用できないのですか?MySqlデータベースのみをサポートしていると言われているので、作者には理由がありません。272ページのMybatisPDFドキュメント編集しました。

おすすめ

転載: blog.51cto.com/14975073/2590388