ホームページ Java &#&チュートリアル Mybatis Plusのパブリックフィールド自動入力

Mybatis Plusのパブリックフィールド自動入力

May 10, 2017 am 09:20 AM
boot mybatis spring 自動入力

この記事では、SpringBoot Mybatis Plus のパブリック フィールドの自動入力機能に関する関連情報を主に紹介します。必要な方は参考にしてください。

1. アプリケーション シナリオ

最終変更時刻 これらの 2 つのフィールドは、ほとんどのテーブルで一般的ですが、追加または変更するたびにこれらのフィールドが渡されたかどうかを考慮するのは非常に面倒です。 mybatisPlus には素晴らしいソリューションがあります。それがパブリックフィールドの自動入力機能です。一般に、この関数は次の条件を満たすフィールドに使用できます:

このフィールドはほとんどのテーブルにあります。

このフィールドの値は固定されているか、フィールド値はバックグラウンドで動的に取得できます。

一般的に使用されるフィールドは、last_update_time と last_update_name です。

2. MybatisPlus を設定する

ガイド パッケージ: 注意すべき点は、mybatisPlus がバージョン 2.0.6 でのみサポートされていることです更新されました 以前は、サポートされていた新しいデータのみが自動的に入力されます。いつでも使用されます。

以前に MybatisPlus を設定したことがある場合は、次の手順を追加するだけで済みます:

IMetaObjectHandler抽象クラスを継承し、insertFill() でデータを追加し、更新時に updateFill() するときに入力する必要があるフィールド設定を実装します。 data 入力する必要があるフィールドに次の 2 つのメソッドを設定します:

package io.z77z.util;
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import io.z77z.entity.SysUser;
/** mybatisplus自定义填充公共字段 ,即没有传的字段自动填充*/
@Component
public class MyMetaObjectHandler extends MetaObjectHandler {
  //新增填充
  @Override
  public void insertFill(MetaObject metaObject) {
    Object lastUpdateNameId = metaObject.getValue("lastUpdateNameId");
    Object lastUpdateTime = metaObject.getValue("lastUpdateTime");
    //获取当前登录用户
    SysUser user = (SysUser)SecurityUtils.getSubject().getPrincipal();
    if (null == lastUpdateNameId) {
      metaObject.setValue("lastUpdateNameId", user.getId());
    }
    if (null == lastUpdateTime) {
      metaObject.setValue("lastUpdateTime", new Date());
    }
  }
  //更新填充
  @Override
  public void updateFill(MetaObject metaObject) {
    insertFill(metaObject);
  }
}
ログイン後にコピー

注: getValue() メソッドのパラメーターは、pojo クラスの variables (キャメルケース命名メソッド) です。

mybatisplus の 設定ファイル で、パブリック フィールド生成クラスの Bean:

// MP 全局配置,更多内容进入类看注释
GlobalConfiguration globalConfig = new GlobalConfiguration();
//配置公共字段自动填写
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
ログイン後にコピー

つまり、MP グローバル設定オブジェクトに書き込まれたばかりのパブリック フィールド充填設定を設定します。

Filled フィールドは検証のために無視する必要があります。テーブル オブジェクト pojo クラスの対応する attribute に次のアノテーションを追加します。

/**
 * 最后修改人Id
 */
@TableField(value="last_update_id",validate=FieldStrategy.NOT_EMPTY)
private String lastUpdateNameId;
/**
 * 最后修改时间
 */
@TableField(value="last_update_time",validate=FieldStrategy.NOT_EMPTY)
private Date lastUpdateTime;
ログイン後にコピー

理由: update メソッドと insert メソッドが呼び出されるときに、属性が正しいかどうかが検証されるためです。渡した属性は空です。これはパブリック フィールドの自動入力と競合するため、この属性が検証を必要としないことを示すために必要です。そうしないと、挿入中に充填が失敗します。

3. テストクラスを書く

4. テストログ

2017/04/23-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.insert-= => 準備: INSERT INTO sys_user ( id, Nickname, email, pswd, `status`, last_update_name_id, last_update_time ) VALUES ( ?, ?, ?, ?, ?,?, ? )

2017/04/23-19: 35:26 [メイン] デバッグ io.z77z.dao.SysUserMapper.insert- ==> パラメータ: 6634923de4a14b6ca3bac5fdf31563a8(文字列)、z77z(文字列)、1093615728@qq.com(文字列)、123123(文字列)、 1(文字列)、123(文字列)、2017-04-23 19:35:26.58(タイムスタンプ)
2017/04/23-19:35:26 [メイン] DEBUG io.z77z.dao.SysUserMapper.insert- <==更新: 1
2017/04/23-19:35:26 [main] DEBUG io.z77z.dao.SysUserMapper.selectById- ==> 準備中: SELECT id,nickname,email,pswd,last_login_time AS lastLoginTime,`status `,last_update_name_id AS lastUpdateNameId、create_name_id AS createNameId、last_update_time AS lastUpdateTime、create_time AS createTime FROM sys_user WHERE id=?
2017/04/23-19:35:26 [main] デバッグ io.z77z.dao.SysUserMapper.selectById- = =&gt;パラメータ:6634923DE4A14B6CA3BAC5FDF31563A8(STRING) :35:26 [main] DEBUG io.z77z.dao.SysUserMapper.updateById- ==> 準備中: UPDATE sys_user SET pswd=?、last_update_name_id=?、last_update_time=? WHERE id=? :35:26 [メイン] DEBUG io.z77z.dao.SysUserMapper.updateById- ==> パラメーター: 123(文字列)、123(文字列)、2017-04-23 19:35:26.637(タイムスタンプ)、6634923de4a14b6ca3bac5fdf3156 3a8 (文字列)
2017/04/23-19:35:26 [メイン] DEBUG io.z77z.dao.SysUserMapper.updateById- <== 更新: 1
2017/04/23-19:35:26 [メイン] ] デバッグ io.z77z.dao.SysUserMapper.selectById- ==> sys_user WHERE id=?
2017/04/23-19:35:26 [メイン] デバッグ io.z77z.dao.SysUserMapper.selectById- ==>パラメータ: 6634923de4a14b6ca3bac5fdf31563a8(String)
2017/04/2 3-19: 35:26 [main] DEBUG io.z77z.dao.SysUserMapper.selectById- <== 合計: 1



5。まとめ

当初、このメソッドを使用して作成者と作成時刻を処理する予定でしたが、最終的に、これら 2 つのフィールドも空として無視される場合、つまり validate=FieldStrategy.NOT_EMPTY が追加された場合、データが更新されることがわかりました。データは作成者と作成時刻も一緒に更新されます。渡されない場合は空に更新されます。したがって、mybatisPlus のパブリックフィールドの自動入力機能は優れていると思いますが、実際のニーズに使用すると完璧ではありません。

【関連する推奨事項】

1. 無料の Java ビデオチュートリアル

2. Java アノテーションの包括的な分析

3. Alibaba Java 開発マニュアル

以上がMybatis Plusのパブリックフィールド自動入力の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Apr 28, 2024 am 11:46 AM

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

MyBatis 1次キャッシュの詳細解説:データアクセス効率を高めるには? MyBatis 1次キャッシュの詳細解説:データアクセス効率を高めるには? Feb 23, 2024 pm 08:13 PM

MyBatis 1次キャッシュの詳細解説:データアクセス効率を高めるには?開発プロセス中、効率的なデータ アクセスは常にプログラマーの焦点の 1 つでした。 MyBatis のような永続層フレームワークの場合、キャッシュはデータ アクセス効率を向上させるための重要な方法の 1 つです。 MyBatis は、一次キャッシュと二次キャッシュという 2 つのキャッシュ メカニズムを提供しており、一次キャッシュはデフォルトで有効になっています。この記事では、MyBatis の 1 次キャッシュのメカニズムを詳細に紹介し、読者の理解を深めるために具体的なコード例を示します。

MyBatis キャッシュ メカニズムの詳細な説明: キャッシュ ストレージの原理を 1 つの記事で理解する MyBatis キャッシュ メカニズムの詳細な説明: キャッシュ ストレージの原理を 1 つの記事で理解する Feb 23, 2024 pm 04:09 PM

MyBatis キャッシュ メカニズムの詳細な説明: キャッシュ ストレージの原理を理解するための 1 つの記事 はじめに MyBatis をデータベース アクセスに使用する場合、キャッシュは非常に重要なメカニズムであり、データベースへのアクセスを効果的に削減し、システム パフォーマンスを向上させることができます。この記事では、キャッシュの分類、ストレージの原則、具体的なコード例など、MyBatis のキャッシュ メカニズムを詳しく紹介します。 1. キャッシュの分類 MyBatis のキャッシュは、主に 1 次キャッシュと 2 次キャッシュの 2 種類に分かれます。 1 次キャッシュは SqlSession レベルのキャッシュです。

MyBatisのキャッシュ機構を解析:一次キャッシュと二次キャッシュの特徴と使い方を比較 MyBatisのキャッシュ機構を解析:一次キャッシュと二次キャッシュの特徴と使い方を比較 Feb 25, 2024 pm 12:30 PM

MyBatis のキャッシュ メカニズムの分析: 1 次キャッシュと 2 次キャッシュの違いと応用 MyBatis フレームワークでは、キャッシュはデータベース操作のパフォーマンスを効果的に向上させることができる非常に重要な機能です。そのうち、一次キャッシュと二次キャッシュは、MyBatis でよく使用される 2 つのキャッシュ メカニズムです。この記事では、一次キャッシュと二次キャッシュの違いと用途を詳細に分析し、具体的なコード例を示して説明します。 1. レベル 1 キャッシュ レベル 1 キャッシュはローカル キャッシュとも呼ばれ、デフォルトで有効になっており、オフにすることはできません。 1次キャッシュはSqlSesです

MyBatis Generator 設定パラメータの解釈とベスト プラクティス MyBatis Generator 設定パラメータの解釈とベスト プラクティス Feb 23, 2024 am 09:51 AM

MyBatisGenerator は、MyBatis が公式に提供するコード生成ツールで、開発者がデータベース テーブル構造に準拠した JavaBeans、Mapper インターフェイス、および XML マッピング ファイルを迅速に生成するのに役立ちます。コード生成に MyBatisGenerator を使用するプロセスでは、構成パラメーターの設定が重要です。この記事では、構成パラメータの観点から開始し、MyBatisGenerator の機能を詳しく説明します。

セキュリティ第一: MyBatis での SQL インジェクションを防ぐベスト プラクティス セキュリティ第一: MyBatis での SQL インジェクションを防ぐベスト プラクティス Feb 22, 2024 pm 12:51 PM

ネットワーク技術が発展し続けるにつれて、データベース攻撃はますます一般的になってきています。 SQL インジェクションは一般的な攻撃手法の 1 つで、攻撃者は悪意のある SQL ステートメントを入力ボックスに入力して不正な操作を実行し、データの漏洩、改ざん、さらには削除を引き起こします。 SQL インジェクション攻撃を防ぐために、開発者はコードを記述するときに特別な注意を払う必要があり、MyBatis などの ORM フレームワークを使用するときは、システムのセキュリティを確保するためのいくつかのベスト プラクティスに従う必要があります。 1. パラメータ化されたクエリ パラメータ化されたクエリは、

MyBatis のバッチ挿入実装原理の深い理解 MyBatis のバッチ挿入実装原理の深い理解 Feb 21, 2024 pm 04:42 PM

MyBatis は、さまざまな Java プロジェクトで広く使用されている人気のある Java 永続層フレームワークです。その中でも、バッチ挿入は、データベース操作のパフォーマンスを効果的に向上させることができる一般的な操作です。この記事では、MyBatis でのバッチ挿入の実装原理を深く調査し、特定のコード例を使用して詳細に分析します。 MyBatis でのバッチ挿入 MyBatis では、通常、バッチ挿入操作は動的 SQL を使用して実装されます。複数の挿入値を含む S を構築することによって

See all articles