`
luckymjl2
  • 浏览: 16257 次
社区版块
存档分类
最新评论

mybatis3.2.2 分页、排序封装实现

阅读更多

页面上往往会传来各种参数,比如排序参数。怎样让这些参数参与到分页实现中去呢?!

mybatis查询方法接受RowBounds对象。只好继承该对象扩展一下了。

public class MyRowBounds extends RowBounds{

private String sidx; //排序参数

private String sord; //asc or desc

public MyRowBounds(int offset, int limit ){

super(offset,limit);

}

public MyRowBounds(int offset, int limit ,String sidx,String sord){

super(offset,limit);

if(StringUtils.isNotEmpty(sidx)){

this.sidx=sidx;

this.sord=sord;

}

}

 

public String getSidx() {

return sidx;

}

 

 

public void setSidx(String sidx) {

this.sidx = sidx;

}

 

 

public String getSord() {

return sord;

}

 

 

public void setSord(String sord) {

this.sord = sord;

}

}

 

参数封装好了,该找入口了

 

@Intercepts({@Signature(type=StatementHandler.class,method="prepare",args={Connection.class})})

public class PaginationInterceptor implements Interceptor{

 

private final static Logger log = Logger.getLogger(PaginationInterceptor.class);

 

 

private Dialect dialect;

public void setDialect(Dialect dialect) {

this.dialect = dialect;

}

 

@Override

public Object intercept(Invocation invocation) throws Throwable {

StatementHandler statementHandler = (StatementHandler)invocation.getTarget();

BoundSql boundSql = statementHandler.getBoundSql();

MetaObject metaStatementHandler = MetaObject.forObject(

statementHandler, new DefaultObjectFactory(),new DefaultObjectWrapperFactory());

RowBounds rowBounds = (RowBounds)metaStatementHandler.getValue("delegate.rowBounds");

if(rowBounds == null || rowBounds == RowBounds.DEFAULT){

return invocation.proceed();

}

 

if(this.dialect == null){

throw new RuntimeException("the value of the dialect property in configuration.xml is not defined : ");

}

 

 

String originalSql = (String) metaStatementHandler.getValue("delegate.boundSql.sql");

 

 

MyRowBounds myRowBounds =(MyRowBounds)rowBounds;  

 

//支持排序

String pageSql=null;

if(StringUtils.isEmpty(myRowBounds.getSidx())){

pageSql=this.dialect.getLimitString(originalSql, rowBounds.getOffset(),rowBounds.getLimit());

} else {

pageSql = this.dialect.getLimitString(originalSql,

rowBounds.getOffset(), rowBounds.getLimit(),

myRowBounds.getSidx(), myRowBounds.getSord());

}

 

 

metaStatementHandler.setValue("delegate.boundSql.sql",pageSql);

metaStatementHandler.setValue("delegate.rowBounds.offset",

RowBounds.NO_ROW_OFFSET);

metaStatementHandler.setValue("delegate.rowBounds.limit", RowBounds.NO_ROW_LIMIT );

if(log.isDebugEnabled()){

log.debug("生成分页SQL : " + boundSql.getSql());

}

return invocation.proceed();

}

 

@Override

public Object plugin(Object target) {

return Plugin.wrap(target, this);

}

 

@Override

public void setProperties(Properties properties) {

}

 

}

入口告诉大家了,具体分页语句的拼接实现,我想就不用说了

记得注入给这个类注入

<!-- 定义mybatis -->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="typeAliasesPackage" value="cn.com.ahsoft" />

        <property name="configLocation" value="classpath:SqlMapConfig.xml"/>

        <!-- 分页 -->

<property name="plugins">      

<bean class="cn.com.ahsoft.framework.mybatis.page.PaginationInterceptor">  

   <property name="dialect">  

       <bean class="cn.com.xxxx.framework.jdbc.dialect.MySQLDialect"></bean>  

   </property>  

</bean> 

</property> 

    </bean>

 

dialect是分页实现,不同的数据库不同,这个由大家自己实现吧就不累赘了,网上也有很多

分享到:
评论

相关推荐

    mybatis-3.2.2-src.rar 源码

    这个源码包"mybatis-3.2.2-src.rar"包含了完整的Mybatis 3.2.2版本的源代码,对开发者来说是一份宝贵的学习资源。 源码分析可以从以下几个主要方面展开: 1. **架构设计**:Mybatis 的核心组件包括...

    myBatis3.2.2带源码和文档

    `mybatis-3.2.2-sources.jar` 包含了MyBatis的源代码,开发者可以通过阅读源码了解MyBatis内部的工作原理,如SqlSession、Executor、Mapper接口等核心组件的实现,以及动态SQL的处理方式。这对于深入学习MyBatis,...

    mybatis3.2.2 sqlmap通配实现

    标题 "mybatis3.2.2 sqlmap通配实现" 指的是在MyBatis 3.2.2版本中使用SQL映射文件(XML配置)进行动态SQL的构建,特别是涉及到通配符(例如`*`)的使用。在MyBatis中,SQLMap是用于定义SQL查询和结果映射的XML文件...

    myBatis3.2.2(含源码、文档)

    在标题"myBatis3.2.2(含源码、文档)"中,我们可以推断这是关于MyBatis框架的特定版本——3.2.2的资源包。这个版本可能包含了框架的源代码,这对于开发者来说非常有价值,因为通过查看源码,可以深入理解框架内部的...

    myEclipse2013+spring-mvc+mybatis3.2.2实现增删改查简单完整版

    myEclipse2013+spring-mvc+mybatis3.2.2实现增删改查简单完整版,可在myEclipse2013自带的Tomcat 7上运行,weblogic上可能有问题,有ModelMap 和ModelAndView的简单使用比较,ModelMap用起来更方便简洁。也使用到了c...

    mybatis-3.2.2版本的jar包和源码

    这个压缩包包含两个文件:`mybatis-3.2.2.jar`是MyBatis的运行时库,而`mybatis-3.2.2-sources.jar`包含了源代码,便于开发者深入理解框架内部工作原理。 首先,`mybatis-3.2.2.jar`是核心库,包含了MyBatis的主要...

    06实现mybatis分页插件demo

    06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...

    springmvc3.2.2+mybatis3.2.2

    1、压缩包是一个 springmvc3.2.2 框架+mybatis3.2.2数据库操作层 的Eclipse工程 2、解压工程 修改数据库配置文件【dbConfig.xml】 编译 部署 发布 在本地或其他机器建一个表名为devType的两个字段的表,详情看映射...

    MyBatis3.2.2中文官方文档

    MyBatis是一款优秀的持久层框架,支持普通的SQL查询、存储过程和高级映射。它将手动的JDBC代码、参数设置以及结果集检索减少到最少,通过简单的XML或注解配置,将接口和Java的POJO(普通的Java对象)映射成数据库中...

    mybatis 3.2.2 中文用户指南

    MyBatis支持多种数据库厂商,因为它具有多数据库支持的能力,并且允许用户通过插件的形式实现动态SQL的脚本语言扩展。MyBatis的Java API为应用程序与MyBatis之间的交互提供了接口,包括SqlSessions和...

    myBatis3.2.2.jar

    myBatis3.2.2.jar

    mybatis-3.2.2-javadoc.jar

    想要学习mybatis 3.2.2 源代码的童鞋可以下载去看看

    mybatis3.2.2官网文档.zip

    mybatis3.2.2官网文档。自从Mybatis转移到GitHub之后就出现了官方文档在网页上很难打开的情况,严重阻碍了学习Mybatis的进程。这是本人找到的Mybatis3.2.2的PDF文档,亲测有效,免费下载。

    mybatis-3.2.2.jar

    ------------------------- ------------------------ mybatis-3.2.2.jar --------------------------- ------------------------

    mybatis-3.2.2 jar包

    例如,可以创建一个PageInterceptor插件实现分页功能。 6. **事务管理**:MyBatis支持手动和自动事务管理。在Spring集成中,通常会使用Spring的事务管理,但在简单的应用中,MyBatis也可以独立处理事务。 7. **...

    MyBatis3.2.2 用户手册中文翻译版

    MyBatis3.2.2 版本是其中的一个稳定版本,提供了大量特性来支持开发者更高效地处理数据库操作。 ### MyBatis 介绍 MyBatis 支持普通 SQL 查询、存储过程以及高级映射,它通过简单的 XML 或注解配置,结合原始的 ...

    mybatis-3.2.2 jar包和pdf文档

    这次我们讨论的是MyBatis的3.2.2版本。 MyBatis 3.2.2 是该框架的一个稳定版本,它在前一版本的基础上进行了一些优化和改进,旨在提高性能和易用性。这个版本包含了核心的MyBatis库(即mybatis-3.2.2.jar)和相关的...

    mybatis 3.2.2源码和jar包

    对于`mybatis-3.2.2.src.zip`,这是MyBatis 3.2.2版本的源代码。通过分析源代码,我们可以深入了解MyBatis的工作原理: 1. **SqlSessionFactoryBuilder**:它是创建SqlSessionFactory的入口,通常在应用初始化时...

    Mybatis 3.2.2 + Spring MVC 3.2

    标题 "Mybatis 3.2.2 + Spring MVC 3.2" 描述了一个整合了Mybatis和Spring MVC两个框架的项目,版本分别为3.2.2和3.2。这个项目应该是一个简单的Web应用程序,它允许开发者通过Spring MVC处理前端请求,并利用...

Global site tag (gtag.js) - Google Analytics