Mybatis自動挿入時間のプラグイン

2176 ワード

一般的なデータベースのテーブル構造にはcreate_があります.dateとupdate_dateの2つのカラムは、現在のローの挿入時間と変更時間を表します.この2つのフィールドは基本的にビジネスにあまり関連していないため、開発中にこの2つのフィールドの値を設定することを忘れがちです.このプラグインはこの問題を解決します.
1.使用方法:mybatisプロファイルに次のような構成を加えると完了します.                       
2.プラグイン構成の説明:create_dateとupdate_dateは、データベース・テーブルの作成時間と更新時間を表します.この2つは、1つだけ構成してもよいし、両方構成してもよいです.どちらも構成されていない場合は、プラグインが機能しないことに相当します.
3.効果:前:insert into smart_user(id,name,password,version)values(?,?,?,?)の後:INSERT INTO smart_user(id,name,password,version,create_date)VALUES(?,,,,,,{ts'2016-06-23 15:01:05.55'})の前:update smart_user set version = ? where id = ? その後:UPDATE smart_user SET version = ?, update_date = '016-06-23 15:01:5' WHERE id = ?
【注】バッチのinsertおよびupdateをサポート
githubアドレス:https://github.com/xjs1919/autodate
----------
プロジェクトには通常、これらのフィールドだけでなく、loginName、userIdという共通のフィールドもあります.挿入時に現在のユーザのログイン名とユーザidを自動的に挿入し、更新時にも同様に現在のユーザ名とユーザidを自動的に挿入する.この部分も完全に抽出できます.
(1)AOPを書き,Mapperのinsertとupdateメソッドをブロックし,現在のユーザ情報をパラメータに注入する.もちろんここではmapperのメソッド命名はinsertやupdateのようなルールに従わなければならない.
(2)mybatisプラグインを書き、insert文とupdate文を変更します.
これにより、開発者に完全に透明になります.
AOP:
@Aspect
@Component
public class CommonDataInject {

    private static Log logger = LogFactory.getLog(CommonDataInject.class);

    @Pointcut("execution(* com.chrhc.projects..*.mapper.*Mapper.insert*(..))")
    private void insertCutMethod() {
    }

    @Pointcut("execution(* com.chrhc.projects..*.mapper.*Mapper.update*(..))")
    private void updateCutMethod() {
    }

    @Around("insertCutMethod()")
    public Object doInsertAround(ProceedingJoinPoint pjp) throws Throwable {
        Object[] args = pjp.getArgs();
        for (Object arg : args) {
            logger.debug("[insert]"+arg);
        }
        Object o = pjp.proceed();
        return o;
    }

    @Around("updateCutMethod()")
    public Object doupdateAround(ProceedingJoinPoint pjp) throws Throwable {
        Object[] args = pjp.getArgs();
        for (Object arg : args) {
            logger.debug("[update]"+arg);
		}
        Object o = pjp.proceed();
        return o;
    }
}