`

mybatis plugin编写

阅读更多
尝试使用了一下mybati的插件功能

写了一个基础类备以后使用
import java.sql.Connection;
import java.util.Properties;

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.RowBounds;

@Intercepts({
	@Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class })
})
public abstract class AbstractMyBatisPlugin implements Interceptor {

	private static final ObjectFactory OBJECT_FACTORY = new DefaultObjectFactory();
	private static final ObjectWrapperFactory OBJECT_WRAPPER_FACTORY = new DefaultObjectWrapperFactory();
	
	private Properties properties;
	
	public abstract void preIntercept(MetaObject metaStatementHandler, Configuration configuration, MappedStatement mappedStatement, BoundSql boundSql, RowBounds rowBounds);
	
	@Override
	public final Object intercept(Invocation invocation) throws Throwable {
		
		StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
		MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, OBJECT_FACTORY, OBJECT_WRAPPER_FACTORY);
		
		// 分离代理对象链(由于目标类可能被多个拦截器拦截,从而形成多次代理,通过下面的两次循环可以分离出最原始的的目标类)
		while (metaStatementHandler.hasGetter("h")) {
			Object object = metaStatementHandler.getValue("h");
			metaStatementHandler = MetaObject.forObject(object, OBJECT_FACTORY, OBJECT_WRAPPER_FACTORY);
		}
		// 分离最后一个代理对象的目标类
		while (metaStatementHandler.hasGetter("target")) {
			Object object = metaStatementHandler.getValue("target");
			metaStatementHandler = MetaObject.forObject(object, OBJECT_FACTORY, OBJECT_WRAPPER_FACTORY);
		}
		
		Configuration configuration     = (Configuration) metaStatementHandler.getValue("delegate.configuration");
		MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");
		BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
		RowBounds rowBounds = (RowBounds) metaStatementHandler.getValue("delegate.rowBounds");
		
		preIntercept(metaStatementHandler, configuration, mappedStatement, boundSql, rowBounds);
		
		return invocation.proceed();
	}

	@Override
	public final Object plugin(Object target) {
		if (target instanceof StatementHandler) {
            return Plugin.wrap(target, this);
        } else {
            return target;
        }
	}
	
	public Properties getProperties() {
		return properties;
	}

	@Override
	public void setProperties(Properties properties) {
		this.properties = properties;
	}

}
分享到:
评论

相关推荐

    mybatisPlugin2.92

    2. 自动导入:在编写Mapper XML文件时,经常需要导入各种实体类或Mapper接口,MyBatis Plugin能自动帮我们完成这部分工作,提高编码效率。 3. 自动完成:在编写SQL时,插件提供代码补全功能,可以根据已有的表名、...

    Free Mybatis plugin 2020.09.15版本

    1. **智能提示**:Free Mybatis Plugin提供了增强的SQL语句智能提示,使得在编写Mapper XML文件时,能快速准确地找到所需的方法和参数,减少了手动输入的时间。 2. **代码生成器**:一键生成Mapper接口、Mapper XML...

    mybatis plugin 3.21

    MyBatis Plugin 提供了代码自动完成、错误检查、快速导航、重构等功能,使得在IDEA中编写MyBatis相关的XML配置和Mapper接口变得更加便捷。它可以帮助开发者快速定位并修复配置问题,提升开发效率和代码质量。 2. *...

    Free MyBatis plugin最新版2021.12.09版本

    尽管Free MyBatis plugin可能不再更新,但MyBatis社区依然活跃,有许多其他的插件可以选择,例如MyBatis Generator用于自动生成Mapper接口、XML文件和DO类,MyBatis Log Plugin用于在日志中打印出完整的SQL和参数等...

    MyBatis plugin 3.155 (最新版)

    MyBatis Plugin 3.155 是针对IntelliJ IDEA的一款强大插件,专为提升MyBatis框架的开发效率而设计。该插件的最新版本修复了一系列的Bug,进一步提高了软件的稳定性和用户体验。在本文中,我们将深入探讨这个插件的...

    mybatis_plugin 2.92

    1. 自定义的 MyBatis 插件类:包含了开发者编写的拦截器实现,可能有多个插件类,每个类针对不同的数据库操作进行拦截。 2. 配置文件:可能包含用于启用和配置插件的 XML 文件,如上述例子所示。 3. 文档:可能包含...

    free myabtis plugin.rar

    《Free Mybatis Plugin:提升开发效率的神器》 在Java Web开发中,Mybatis作为一款优秀的持久层框架,因其灵活性和高效性深受开发者喜爱。然而,对于大型项目而言,频繁在Mapper接口和对应的XML配置文件间切换,...

    Mybatis plugin

    Mybatis Plugin是一款专门为...总之,Mybatis plugin是提升Mybatis开发体验的重要工具,无论是在代码编写、调试还是维护阶段,都能提供极大的便利。熟练掌握其使用,能够显著提高开发效率,让开发工作更加得心应手。

    Mybatis Plugin 3.21

    Mybatis Plugin 3.21 是一款针对Mybatis框架的扩展插件,旨在提升开发效率和优化数据库操作体验。此版本为个人备用,通常需要在已有项目中替换原有的iMybatis插件文件,以更新到最新功能。在使用过程中,确保你已经...

    2018.1版本 idea- mybatis plugin插件

    《IDEA与MyBatis Plugin插件的深度解析与应用》 在当今的软件开发领域,IntelliJ IDEA(简称IDEA)以其强大的功能和友好的用户体验,深受广大Java开发者喜爱。而MyBatis作为一款优秀的持久层框架,极大地简化了...

    Mybatis Plugin 2018.1 可用

    Mybatis Plugin是一款针对IntelliJ IDEA的高效开发插件,专为Java开发人员设计,尤其在处理Mybatis框架相关的开发工作时提供了极大的便利。这款插件的2018.1版本表明它与IntelliJ IDEA 2018.1版本兼容,同时也支持较...

    mybatis plugin 3.42

    mybatis plugin插件是一款兼容 IntelliJ IDEA 和Android Studio编程开发工具的插件,这个工具目前更新到了v3.42最新版本,...mybatis plugin插件是从头开始重新编写的,使其更稳定,带来许多新功能。一起来体验下吧!

    Mybatis Plugin插件,提供多种版本,内附说明

    Mybatis Plugin是一款强大的开发工具,专门针对Mybatis框架设计,旨在提升开发效率,尤其是在大型项目中,它能够帮助开发者快速定位代码,实现Mapper与DAO之间的便捷跳转。这款插件适用于IntelliJ IDEA(以下简称...

    idea mybatis plugin 2.91

    《Idea Mybatis Plugin 2.91:提升Mybatis开发效率的秘密武器》 在Java开发领域,IntelliJ IDEA(简称Idea)以其强大的功能和优秀的用户体验深受开发者喜爱。而针对Mybatis框架的插件Idea Mybatis Plugin 2.91,则...

    MyBatis_plugin 2018.1版IDEA可用

    【MyBatis_Plugin 2018.1版IDEA可用】 MyBatis_Plugin是一款专为IntelliJ IDEA(简称IDEA)设计的插件,尤其适用于那些使用MyBatis框架进行开发的程序员。这个插件在2018.1版本中得到了很好的支持,意味着它与IDEA...

    free mybatis plugins

    MyBatis 是一款深受开发者喜爱的持久层框架,它简化了Java开发中的数据库操作,使得开发者可以更加专注于SQL语句的编写,而无需过多关注底层的JDBC代码。"Free MyBatis Plugins" 提供了对MyBatis的增强功能,帮助...

    mybatis插件直接可用

    在"C:\Users\Administrator\.IntelliJIdea2018.1"这个路径下,通常是IDEA的用户配置目录,放入名为"MyBatis plugin"的压缩包文件,解压后插件会自动被IDEA识别并启用。 插件的主要功能包括: 1. **智能提示**:在...

    mybatis离线插件包

    1. **自动化CRUD操作**:MP提供了全自动化的增删改查方法,大大减少了开发者编写基础代码的时间。 2. **条件构造器**:MP内置了丰富的条件构造器,可以方便地构建复杂的SQL语句,如模糊查询、范围查询等。 3. **一键...

    MyBatis_plugin-3.21

    总的来说,MyBatis Plugin 3.2.1是IDEA用户进行MyBatis开发的强大助手,通过其丰富的特性,能够帮助开发者更快地完成代码编写,提高开发效率,降低出错概率,从而专注于业务逻辑的实现。对于MyBatis的使用者来说,这...

    2018mybaits_plugin

    2018mybaits_plugin 描述的是一个在2018年分享的MyBatis相关的插件集合,旨在为开发者提供便利,提升开发效率。 MyBatis 插件机制是MyBatis框架中的一个重要特性,它允许用户自定义拦截器来增强MyBatis的功能。例如...

Global site tag (gtag.js) - Google Analytics