I.はじめにカスタムグローバルオペレーション
MPはAutoSqlInjectorが拡張提供所望カスタマイズすることができ、SQLをカスタムに対応するグローバル、MPに注入自動注入のための方法。すなわち、インターフェースはメソッドである場合、それぞれのローディングの構成環境に注入するBaseMapper <T>を継承しています。
第二に、以下のカスタムグローバルを達成するために
2.1、マッパーでインターフェースで定義された方法を実装し
パブリック インターフェース EmployeeMapper 延び BaseMapperを<従業員> { / ** *カスタム注入法 * @return * / INT DELETEALL(); }
2.2、継承AutoSqlInjector、および内部噴射方法のオーバーライド
パブリック クラス DeleteAllInject 拡張AutoSqlInjector { @Override 公共 のボイドジェクト(設定設定、MapperBuilderAssistant builderAssistant、クラス<?> mapperClass、 クラス <?> modelClass、TableInfo表){ / ** *コアは方法で、SQL文のインターフェイスマッパーがありますマッピング *ターゲットMapperStatementにパッケージ 自動的に初期化中にロードされる* Configurationオブジェクト * / 文字列のSQL = + "から削除" table.getTableName(); 文字列メソッド = "DELETEALL" ; SqlSource sqlSource =languageDriver.createSqlSource(構成、SQL、modelClass)。 この.addDeleteMappedStatement(mapperClass、方法、sqlSource)。 } }
2.3最後に、豆にグローバルコンフィギュレーション政策に注入しました
<! - MyBatisの-PLUSため、グローバルコンフィギュレーションポリシー、各エンティティの構成では、アノテーションの繰り返し使用を避けること- > < 豆ID =「globalConfiguration」クラス=「com.baomidou.mybatisplus.entity.GlobalConfiguration」> < プロパティ名= "dbColumnUnderline" 値= "trueに" > </ プロパティ> <! - デフォルトのコンフィギュレーション・データベースバージョン2.3アンダースコア- > <! - 指定したデータベースID生成戦略0:インクリメントデータベース- > < プロパティ名= " idtype " 値=" 0 " > </ プロパティ> <! - 指定されたデータベースのテーブルのプレフィックス- > < プロパティ名= "tablePrefix" 値= "TBL_" > </ プロパティ> <! - 注入全局配置方法- > < プロパティ名= "sqlInjector" REF = "deleteAllInject" > </ プロパティ> </ 豆> < 豆ID = "deleteAllInject" クラス= "cn.hjj.mp.inject.DeleteAllInject" > </ 豆>
2.4、次のテストコード
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(位置= { "クラスパス:applicationContext.xmlを"})
publicクラスTestAutoSqlInject {
@Autowired
プライベートEmployeeMapper employeeMapper。
@Test
公共ボイドtestDeleteAll(){
employeeMapper.deleteAll()。
}
}
第三に、墓石のプロフィール
墓碑:データは貴重であるため、データベースからの削除データに真実ではありません。データベース内の唯一の論理レコードが削除され、削除、削除状態フィールドがに設定されています
次のように墓石を達成
4.1、新しいエンティティを作成し、対応するデータベース内の対応するデータテーブルを作成します
@TableLogicを識別するために使用するノートフラグフィールドは、識別フィールドであるMPのノウハウを語りました
パブリック クラスユーザー{ @TableId(タイプ = IdType.AUTO) プライベート整数ID、 プライベート文字列名; @TableLogic // フラグの論理記号である プライベート整数deleteFlag; // getメソッド // SETメソッド }
構成ファイル内の4.2、豆および設定対応するパラメータ
applicationContext.xmlを
<! - MyBatisの-PLUSため、グローバルコンフィギュレーションポリシー、各エンティティの構成では、アノテーションの繰り返し使用を避けること- > < 豆ID =「globalConfiguration」クラス=「com.baomidou.mybatisplus.entity.GlobalConfiguration」> < プロパティ名= "dbColumnUnderline" 値= "trueに" > </ プロパティ> <! - デフォルトのコンフィギュレーション・データベースバージョン2.3アンダースコア- > <! - 指定したデータベースID生成戦略0:インクリメントデータベース- > < プロパティ名= " idtype " 値=" 0 " > </ プロパティ> <! - 指定されたデータベースのテーブルのプレフィックス- > < プロパティ名= "tablePrefix" 値= "TBL_" > </ プロパティ> <! - 削除インジェクションロジック- > < プロパティ名= "sqlInjector" REF = "logicSqlInjector" > </ プロパティ> <! - 墓石グローバル値- - > < プロパティ名= "logicDeleteValue" 値= " - 1" > </ プロパティ> <! - 論理はグローバル値を削除- > < プロパティ名= "logicNotDeleteValue" 値「1" = > </ プロパティ> </ 豆> <! - コンフィギュレーションの墓石は、豆を注入された- > < 豆ID = "logicSqlInjector" クラス= "com.baomidou.mybatisplus.mapper.LogicSqlInjector" > </ 豆>
4.3、次のテストコード
@RunWith(SpringJUnit4ClassRunner クラス) @ContextConfiguration(位置 = { "クラスパス:applicationContext.xmlを" }) パブリック クラスTestLogicDelete { @Autowired プライベートUserMapper userMapper。 @Test 公共 ボイドtestDelete(){ 整数RES = userMapper.deleteById(1 )。 System.out.println( "RES:" + RES)。 } @Test 公共 ボイドtestSelect(){ ユーザーユーザー = userMapper.selectById(1 )。 System.out.println( "RES:" +ユーザー); } }
エッセンス:削除、およびクエリは、現在の論理状態レコードを削除するには、時間が墓石フィールドを来るとき、削除が実際に更新ステートメントで実行されますが、「墓石グローバル値」の設定に更新されます