尝试使用了一下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;
}
}
分享到:
相关推荐
2. 自动导入:在编写Mapper XML文件时,经常需要导入各种实体类或Mapper接口,MyBatis Plugin能自动帮我们完成这部分工作,提高编码效率。 3. 自动完成:在编写SQL时,插件提供代码补全功能,可以根据已有的表名、...
1. **智能提示**:Free Mybatis Plugin提供了增强的SQL语句智能提示,使得在编写Mapper XML文件时,能快速准确地找到所需的方法和参数,减少了手动输入的时间。 2. **代码生成器**:一键生成Mapper接口、Mapper XML...
MyBatis Plugin 提供了代码自动完成、错误检查、快速导航、重构等功能,使得在IDEA中编写MyBatis相关的XML配置和Mapper接口变得更加便捷。它可以帮助开发者快速定位并修复配置问题,提升开发效率和代码质量。 2. *...
尽管Free MyBatis plugin可能不再更新,但MyBatis社区依然活跃,有许多其他的插件可以选择,例如MyBatis Generator用于自动生成Mapper接口、XML文件和DO类,MyBatis Log Plugin用于在日志中打印出完整的SQL和参数等...
MyBatis Plugin 3.155 是针对IntelliJ IDEA的一款强大插件,专为提升MyBatis框架的开发效率而设计。该插件的最新版本修复了一系列的Bug,进一步提高了软件的稳定性和用户体验。在本文中,我们将深入探讨这个插件的...
1. 自定义的 MyBatis 插件类:包含了开发者编写的拦截器实现,可能有多个插件类,每个类针对不同的数据库操作进行拦截。 2. 配置文件:可能包含用于启用和配置插件的 XML 文件,如上述例子所示。 3. 文档:可能包含...
《Free Mybatis Plugin:提升开发效率的神器》 在Java Web开发中,Mybatis作为一款优秀的持久层框架,因其灵活性和高效性深受开发者喜爱。然而,对于大型项目而言,频繁在Mapper接口和对应的XML配置文件间切换,...
Mybatis Plugin是一款专门为...总之,Mybatis plugin是提升Mybatis开发体验的重要工具,无论是在代码编写、调试还是维护阶段,都能提供极大的便利。熟练掌握其使用,能够显著提高开发效率,让开发工作更加得心应手。
Mybatis Plugin 3.21 是一款针对Mybatis框架的扩展插件,旨在提升开发效率和优化数据库操作体验。此版本为个人备用,通常需要在已有项目中替换原有的iMybatis插件文件,以更新到最新功能。在使用过程中,确保你已经...
《IDEA与MyBatis Plugin插件的深度解析与应用》 在当今的软件开发领域,IntelliJ IDEA(简称IDEA)以其强大的功能和友好的用户体验,深受广大Java开发者喜爱。而MyBatis作为一款优秀的持久层框架,极大地简化了...
Mybatis Plugin是一款针对IntelliJ IDEA的高效开发插件,专为Java开发人员设计,尤其在处理Mybatis框架相关的开发工作时提供了极大的便利。这款插件的2018.1版本表明它与IntelliJ IDEA 2018.1版本兼容,同时也支持较...
mybatis plugin插件是一款兼容 IntelliJ IDEA 和Android Studio编程开发工具的插件,这个工具目前更新到了v3.42最新版本,...mybatis plugin插件是从头开始重新编写的,使其更稳定,带来许多新功能。一起来体验下吧!
Mybatis Plugin是一款强大的开发工具,专门针对Mybatis框架设计,旨在提升开发效率,尤其是在大型项目中,它能够帮助开发者快速定位代码,实现Mapper与DAO之间的便捷跳转。这款插件适用于IntelliJ IDEA(以下简称...
《Idea Mybatis Plugin 2.91:提升Mybatis开发效率的秘密武器》 在Java开发领域,IntelliJ IDEA(简称Idea)以其强大的功能和优秀的用户体验深受开发者喜爱。而针对Mybatis框架的插件Idea Mybatis Plugin 2.91,则...
【MyBatis_Plugin 2018.1版IDEA可用】 MyBatis_Plugin是一款专为IntelliJ IDEA(简称IDEA)设计的插件,尤其适用于那些使用MyBatis框架进行开发的程序员。这个插件在2018.1版本中得到了很好的支持,意味着它与IDEA...
MyBatis 是一款深受开发者喜爱的持久层框架,它简化了Java开发中的数据库操作,使得开发者可以更加专注于SQL语句的编写,而无需过多关注底层的JDBC代码。"Free MyBatis Plugins" 提供了对MyBatis的增强功能,帮助...
在"C:\Users\Administrator\.IntelliJIdea2018.1"这个路径下,通常是IDEA的用户配置目录,放入名为"MyBatis plugin"的压缩包文件,解压后插件会自动被IDEA识别并启用。 插件的主要功能包括: 1. **智能提示**:在...
1. **自动化CRUD操作**:MP提供了全自动化的增删改查方法,大大减少了开发者编写基础代码的时间。 2. **条件构造器**:MP内置了丰富的条件构造器,可以方便地构建复杂的SQL语句,如模糊查询、范围查询等。 3. **一键...
总的来说,MyBatis Plugin 3.2.1是IDEA用户进行MyBatis开发的强大助手,通过其丰富的特性,能够帮助开发者更快地完成代码编写,提高开发效率,降低出错概率,从而专注于业务逻辑的实现。对于MyBatis的使用者来说,这...
2018mybaits_plugin 描述的是一个在2018年分享的MyBatis相关的插件集合,旨在为开发者提供便利,提升开发效率。 MyBatis 插件机制是MyBatis框架中的一个重要特性,它允许用户自定义拦截器来增强MyBatis的功能。例如...