この記事では、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- 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- = =>パラメータ: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- 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-
5。まとめ
当初、このメソッドを使用して作成者と作成時刻を処理する予定でしたが、最終的に、これら 2 つのフィールドも空として無視される場合、つまり validate=FieldStrategy.NOT_EMPTY が追加された場合、データが更新されることがわかりました。データは作成者と作成時刻も一緒に更新されます。渡されない場合は空に更新されます。したがって、mybatisPlus のパブリックフィールドの自動入力機能は優れていると思いますが、実際のニーズに使用すると完璧ではありません。 【関連する推奨事項】
以上がMybatis Plusのパブリックフィールド自動入力の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。

Javaには、さまざまなプラットフォームでの特定の構成とチューニングが必要です。 1)-XMSや-XMXなどのJVMパラメーターを調整して、ヒープサイズを設定します。 2)ParallelGCやG1GCなどの適切なごみ収集戦略を選択します。 3)さまざまなプラットフォームに適応するようにネイティブライブラリを構成します。これらの測定により、Javaアプリケーションはさまざまな環境で最適に機能することができます。

Osgi、apachecommonslang、jna、andjvmoptionsareeffectiveforformplatform-specificchallengesinjava.1)osgimanagesdependenciesandisolatescomponents.2)apachecommonslangprovidesutilityfunctions.3)jnaallowsnativecode.4)

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









