java操作日志插件_SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比...

引文本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录、在更新数据时准确记录更新字段核心:AOP、mybatis插件(拦截器)、mybatis-Plus实体规范、数据对比1、相关技术简介mybatis插件:mybatis插件实际上就是官方针对4层数据操作处理预留的拦截器,使用者可以根据不同的需求进...
摘要由CSDN通过智能技术生成

引文

本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录、在更新数据时准确记录更新字段

核心:AOP、mybatis插件(拦截器)、mybatis-Plus实体规范、数据对比

1、相关技术简介

mybatis插件:

mybatis插件实际上就是官方针对4层数据操作处理预留的拦截器,使用者可以根据不同的需求进行操作拦截并处理。这边笔者不做详细描述,详细介绍请到官网了解,这里笔者就复用官网介绍。

插件(plugins)

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

ParameterHandler (getParameterObject, setParameters)

ResultSetHandler (handleResultSets, handleOutputParameters)

StatementHandler (prepare, parameterize, batch, update, query)

这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。 如果你想做的不仅仅是监控方法的调用,那么你最好相当了解要重写的方法的行为。 因为如果在试图修改或重写已有方法的行为的时候,你很可能在破坏 MyBatis 的核心模块。 这些都是更低层的类和方法,所以使用插件的时候要特别当心。

通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可。

// ExamplePlugin.java

@Intercepts({@Signature(

type= Executor.class,

method = "update",

args = {MappedStatement.class,Object.class})})

public class ExamplePlugin implements Interceptor {

private Properties properties = new Properties();

public Object intercept(Invocation invocation) throws Throwable {

// implement pre processing if need

Object returnObject = invocation.proceed();

// implement post processing if need

return returnObject;

}

public void setProperties(Properties properties) {

this.properties = properties;

}

}

上面的插件将会拦截在 Executor 实例中所有的 “update” 方法调用, 这里的 Executor 是负责执行低层映射语句的内部对象。

提示 覆盖配置类

除了用插件来修改 MyBatis 核心行为之外,还可以通过完全覆盖配置类来达到目的。只需继承后覆盖其中的每个方法,再把它传递到 SqlSessionFactoryBuilder.build(myConfig) 方法即可。再次重申,这可能会严重影响 MyBatis 的行为,务请慎之又慎。

重点讲下4层处理,MyBatis两级缓存就是在其中两层中实现

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

所有数据库操作到达底层后都由该执行器进行任务分发,主要有update(插入、更新、删除),query(查询),提交,回滚,关闭链接等

ParameterHandler (getParameterObject, setParameters)

参数处理器(获取参数,设置参数)

ResultSetHandler (handleResultSets, handleOutputParameters)

结果集处理器(结果集,输出参数)

StatementHandler (prepare, parameterize, batch, update, query)

声明处理器、准备链接jdbc前处理,prepare(预处理):生成sql语句,准备链接数据库进行操作

以上4层执行顺序为顺序执行

Executor是 Mybatis的内部执行器,它负责调用StatementHandler操作数据库,并把结果集通过 ResultSetHandler进行自动映射,另外,他还处理了二级缓存的操作。从这里可以看出,我们也是可以通过插件来实现自定义的二级缓存的。

ParameterHandler是Mybatis实现Sql入参设置的对象。插件可以改变我们Sql的参数默认设置。

ResultSetHandler是Mybatis把ResultSet集合映射成POJO的接口对象。我们可以定义插件对Mybatis的结果集自动映射进行修改。

StatementHandler是Mybatis直接和数据库执行sql脚本的对象。另外它也实现了Mybatis的一级缓存。这里,我们可以使用插件来实现对一级缓存的操作(禁用等等)。

MyBatis-Plus:

MyBatis增强器,主要规范了数据实体,在底层实现了简单的增删查改,使用者不再需要开发基础操作接口,小编认为是最强大、最方便易用的,没有之一,不接受任何反驳。详细介绍请看官网。

数据实体的规范让底层操作更加便捷,本例主要实体规范中的表名以及主键获取,下面上实体规范demo

package com.lith.datalog.entity;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.extension.activerecord.Model;

import lombok.Data;

import lombok.EqualsAndHashCode;

/**

*

* 用户表

*

*

* @author Tophua

* @since 2020/5/7

*/

@Data

@EqualsAndHashCode(callSuper = true)

public class User extends Model {

/**

* 主键id

*/

@TableId(value = "id", type = IdType.AUTO)

private Integer id;

private String name;

private Integer age;

private String email;

}

2、实现

本文所要讲述的就是在第一级(Executor)进行拦截并实现数据对比记录。

本例为公共模块实现,然后在其它模块中依赖此公共模块,根据每个模块不同的需求自定义实现不同的处理。

结构目录

一、配置

1 packagecom.lith.datalog.config;

2

3 importcom.lith.datalog.handle.DataUpdateInterceptor;

4 importorg.mybatis.spring.annotation.MapperScan;

5 importorg.springframework.context.annotation.Bean;

6 importorg.springframework.context.annotation.Configuration;

7 importorg.springframework.context.annotation.Profi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一名语言模型AI,无法为您提供具体的代码实现。但是我可以提供一些思路和步骤。 1. 准备好环境 首先需要安装Java、IntelliJ IDEA、MySQL等软件,并创建好相应的数据库和表。需要添加相关的依赖,比如spring-boot-starter、mybatis-plus-boot-starter等等,以及Ajax和LayUI的相关库。 2. 创建实体类和Mapper接口 创建员工和日志的实体类,以及对应的Mapper接口,用于对数据库进行操作。可以使用Mybatis-Plus的代码生成器来自动生成基础的代码。 3. 编写业务逻辑层 在业务逻辑层中编写增删改查等操作方法,以及一些自定义的业务方法,用于处理员工和日志的具体业务需求。 4. 编写Controller层 在Controller层中处理请求和返回数据,并调用相应的业务逻辑方法。可以使用Ajax来实现异步提交数据和返回结果,使用LayUI框架来美化页面和处理交互逻辑。 5. 添加安全认证和日志记录 添加安全认证功能,以实现员工的登录、登出等操作,并记录相关的日志信息。可以使用Spring Security等框架来实现认证和授权,并使用AOP技术来记录日志信息。 6. 测试和部署 在本地进行测试,并将代码打包部署到服务器上。可以使用Maven来管理依赖和构建项目,使用Docker等容器技术来部署和管理应用程序。 以上就是实现员工管理和日志管理的大致步骤和思路。当然,具体实现还需要根据具体的业务需求和技术选型来进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值