拦截器介绍
Mybatis Interceptor 在 Mybatis 中被当作 Plugin(插件),不知道为什么,但确实是在 org.apache.ibatis.plugin 包下面。
既然是拦截器,可以拦截哪些内容呢?试想一下...... 当程序写到持久层时,Mybatis 会 执行 指定 SQL 语句,并处理 请求参数 和 返回值。没错,Mybatis 拦截器可以帮助我们处理上述内容,请看官网的 Plugins 的片段, 内容不多
// 执行Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)// 请求参数处理ParameterHandler (getParameterObject, setParameters)// 返回结果集处理ResultSetHandler (handleResultSets, handleOutputParameters)// SQL语句构建StatementHandler (prepare, parameterize, batch, update, query)
拦截器的使用
如果需要实现自定义的拦截器,只需要实现 org.apache.ibatis.plugin.Interceptor 接口,该接口有三个方法:
Object intercept(Invocation invocation) throws Throwable;Object plugin(Object target);void setProperties(Properties properties);
我们要实现数据加密,进入数据库的字段不能是真实的数据,但是返回来的数据要真实可用,所以我们需要针对 Parameter 和 ResultSet 两种类型处理,同时为了更灵活的使用,我们需要自定义注解
自定义注解
类注解,将注解放在实体类上
/*** 需要加解密的类注解*/@Documented@Inherited@Target({ ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)public @interface EncryptDecryptClass {}
字段注解,将注解放在实体字段上
/*** 加密字段注解*/@Documented@Inherited@Target({ ElementType.FIELD })@Retention(RetentionPolicy.RUNTIME)public @interfa

本文介绍了如何利用Mybatis的拦截器实现数据的加密与解密,包括自定义注解、参数处理拦截器和结果集拦截器的实现。通过自定义的加密解密接口和YAML配置,实现了全局的加密解密策略。此外,文章还提及了MyBatis Log Plugin这一提高调试效率的工具。
3867

被折叠的 条评论
为什么被折叠?



