标签:拦截器

使用AOP的方式修改第三方jar包中的源码

发表于1年前(Jul 5, 2016 5:03:49 PM)  阅读 731  评论 0

分类: Java

标签: AOP 拦截器 修改源码 类加载 切面

一个好的工具库,一般都会提供灵活的接口给用户进行修改和扩展,但还是会有没有考虑的情况,或者总有原因会促使我们去修改源码。这里,笔者主要是面对需要修改源码中一个类的一个方法的情况,其他情况都可以类似解决,只是复杂度的问题。

修改源码有几种方式,我们可以将修改编译后的class文件,替换原来jar包里面的class文件,这种方法不推荐使用。还一种办法就是在自己项目工程里面加入新的同名,同包的类,这样虚拟机会优先加载项目中的class,这是一种比较好的方式。不过这种方式有些情况也不适用,如自己发布了一个jar包,里面有一个class就是修改的第三方jar包源码,这时,很有可能编译或者运行时加载的class就不是你需要的那个class了。如果运行时加载的class不是你所需要的class,我们还可以通过配置启动命令,指定优先加载的jar包来修改类加载顺序,我们在weblogic使用jpa2.0的时候,经常需要修改优先加载的jar包。这样问题解决了,但是需要后期部署做一些额外操作,所以也不算完美。

最完美的方式就是使用aop机制。使用aop机制,我们

......

PageHelper不支持STATEMENT非预编译的SQL

发表于2年前(Apr 18, 2016 10:09:05 AM)  阅读 555  评论 0

分类: Java

标签: mybatis 分页 PageHelper statementType STATEMENT 预编译 非预编译 intercepts 拦截器 动态sql 动态表名 动态字段名

PageHelper是一个很方便的mybatis的分页组件,如果你正在使用mybatis,建议尝试使用PageHelper进行分页。PageHelper是使用mybatis的拦截器intercepts实现分页操作的。

但PageHelper并不支持STATEMENT非预编译的SQL的分页,笔者调试时观察了一下,应该是由于SQL里面的分页参数使用的?,PageHelper修改SQL的时候无法将参数正确设置,所以导致了语法错误,mybatis使用的很少,笔者也不知道这个问题是不是一个问题,能否解决,如果有读者也遇到该问题,请暂时想别的办法吧。

其实笔者之所以使用STATEMENT非预编译的SQL,是想实现一个通用的Mapper,动态传入表名和字段名,查看网上资料都表明需要设置statementType="STATEMENT",所以出现了上面的问题,但后来笔者实验发现,动态sql并不需要强制设置statementType="STATEMENT",在默认预编译环境下运行,笔者测试暂时未发现有什么问题,笔者自己

......