struts2spring3mybatis3拦截器分页技术

struts2spring3.2.4mybatis-3.2.3通用分页(不同数据库)拦截器mybatis没有根据数据库方言进行分页封装,但是提供了拦截器,我们可以在拦截其中获取数据库方言(数据库方言通过配置文件获取)和查询sql,根据数据库方言进行翻页分装,在拦截其中有两种实现方式:1.拦截器中计算总数,通过jdbc的方式,再封装翻页sql2.计算总数在应用层计算,拦截器中只通过数据库方言进行查询sql的封装本人认为第一种方式可能会影响到性能,下面是通过第二种方法实现分页1、拦截器类[java]viewplaincopyprint?1.packagecom.zhou.bean;2.3.importjava.lang.reflect.Field;4.importjava.sql.Connection;5.importjava.sql.PreparedStatement;6.importjava.sql.ResultSet;7.importjava.sql.SQLException;8.importjava.util.List;9.importjava.util.Properties;10.11.importorg.apache.ibatis.executor.parameter.ParameterHandler;12.importorg.apache.ibatis.executor.statement.RoutingStatementHandler;13.importorg.apache.ibatis.executor.statement.StatementHandler;14.importorg.apache.ibatis.mapping.BoundSql;15.importorg.apache.ibatis.mapping.MappedStatement;16.importorg.apache.ibatis.mapping.ParameterMapping;17.importorg.apache.ibatis.plugin.Interceptor;18.importorg.apache.ibatis.plugin.Intercepts;19.importorg.apache.ibatis.plugin.Invocation;20.importorg.apache.ibatis.plugin.Plugin;21.importorg.apache.ibatis.plugin.Signature;22.importorg.apache.ibatis.scripting.defaults.DefaultParameterHandler;23.24./**25.*@authorzhouzhenlong26.*@date2012-11-20下午04:33:3527.*@description不在拦截器中计算总数,影响效率28.*@versionV1.029.*30.*分页拦截器,用于拦截需要进行分页查询的操作,然后对其进行分页处理。利用拦截器实现Mybatis分页的原理:31.*要利用JDBC对数据库进行操作就必须要有一个对应的Statement对象32.*,Mybatis在执行Sql语句前就会产生一个包含Sql语句的Statement对象,而且对应的Sql语句33.*是在Statement之前产生的,所以我们就可以在它生成Statement之前对用来生成Statement的Sql语句下手34.*。在Mybatis中Statement语句是通过RoutingStatementHandler对象的35.*prepare方法生成的。所以利用拦截器实现Mybatis分页的一个思路就是拦截StatementHandler接口的prepare方法36.*,然后在拦截器方法中把Sql语句改成对应的分页查询Sql语句,之后再调用37.*StatementHandler对象的prepare方法,即调用invocation.proceed()。38.*对于分页而言,在拦截器里面我们还需要做的一个操作就是统计满足当前条件的记录一共有多少39.*,这是通过获取到了原始的Sql语句后,把它改为对应的统计语句再利用Mybatis封装好的参数和设40.*置参数的功能把Sql语句中的参数进行替换,之后再执行查询记录数的Sql语句进行总记录数的统计。41.*42.*/43.@Intercepts({@Signature(method="prepare",type=StatementHandler.class,args={Connection.class})})44.publicclassPageInterceptorimplementsInterceptor{45.46.privateStringdatabaseType;//数据库类型,不同的数据库有不同的分页方法47.48./**49.*拦截后要执行的方法50.*/51.publicObjectintercept(Invocationinvocation)throwsThrowable{52.//对于StatementHandler其实只有两个实现类,一个是RoutingStatementHandler,另一个是抽象类BaseStatementHandler,53.//BaseStatementHandler有三个子类,分别是SimpleStatementHandler,PreparedStatementHandler和CallableStatementHandler,54.//SimpleStatementHandler是用于处理Statement的,PreparedStatementHandler是处理PreparedStatement的,而CallableStatementHandler是55.//处理CallableStatement的。Mybatis在进行Sql语句处理的时候都是建立的RoutingStatementHandler,而在RoutingStatementHandler里面拥有一个56.//StatementHandler类型的delegate属性,RoutingStatementHandler会依据Statement的不同建立对应的BaseStatementHandler,即SimpleStateme...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?