近两天一直再研究MyBatis的分页问题,看了别人的处理方式,自己总结优化了一下,写了两个拦截类,给有需要的人使用和参考,源码请下载附件。
主要有3个类:Page,MybatisPageInterceptor,MybatisSpringPageInterceptor
Page:作为分页对象,有:pageNo、pageSize、totalRecord、totalPage、results属性
MybatisPageInterceptor和MybatisSpringPageInterceptor:
均为拦截类,仅需要选用其中的一个,前者在任何情况下都可用,后再仅在Spring环境下使用。
推荐使用后者,其优点是使用后无需对mapper的XML文件作任何修改,只需要修改Mapper类的方法,增加一个Page类型的参数即可。而前者使用时有可能会需要修改XML,特别是原Mapper方法只有一个参数时,需要增加@Param指定参数名,而后修改XML文件使用该参数名。
以下给出在Spring环境下的配置使用方法示例:
MybatisSpringPageInterceptor:
修改Spring配置文件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis/mybatis.config.xml"/> <property name="typeAliasesPackage" value="com.xjd.springmybatis.model" /> <property name="plugins"> <bean class="com.xjd.springmybatis.mybatispage.MybatisSpringPageInterceptor"> </bean> </property> </bean>
修改Mapper方法:
public List<User> getByName(String username);
为
public List<User> getByName(String username, Page page);
Ok, 即可使用了。
MybatisPageInterceptor:
修改spring配置文件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis/mybatis.config.xml"/> <property name="typeAliasesPackage" value="com.xjd.springmybatis.model" /> <property name="plugins"> <bean class="com.xjd.springmybatis.mybatispage.MybatisPageInterceptor"> </bean> </property> </bean>
修改Mapper方法:
public List<User> getByName(String username);
为
public List<User> getByName(@Param("user") String username, Page page);
必要时修改mapper的xml文件:
<select id="getByName" parameterType="map" resultMap="user_map" > select <include refid="user_columns"/>, <include refid="addr_columns"/> from user u left join address addr on u.id = addr.user_id where u.username = #{user} </select>
Ok, 即可使用了。
使用方式:
Page<User> page = new Page<User>(); page.setPageNo(1); page.setPageSize(20); List<User> users = mapper.getByName("xjd", page); System.out.println(page); //users == page.getResults()
注意:目前只支持MySQL和Oracle,其它数据库请自行修改代码。
相关推荐
在传统的Mybatis中,如果要实现分页查询,通常需要手动编写带有LIMIT和OFFSET的SQL语句,这种方式既不直观,又容易出错,特别是在处理大数据量时,效率较低。Mybatis通用分页插件通过自动处理分页参数,极大地简化了...
在Service层,我们可以利用MyBatis的分页插件,如PageHelper,自动实现SQL的分页查询。返回结果后,Controller将分页信息和数据传递给视图,如Bootstrap模板,展示分页效果。 权限设置则是为了确保不同用户只能访问...
- **自动分页**:通过BaseMapper接口,自动处理分页逻辑。 - **条件构造**:通过QueryWrapper或LambdaQueryWrapper,可以方便地构造复杂查询条件。 - **数据操作**:提供insert、update、delete等方法,简化了对...
本项目是基于Spring和MyBatis框架实现的物理分页,让我们来深入探讨这个主题。 首先,Spring是一个开源的Java应用程序框架,它提供了一种依赖注入(Dependency Injection,DI)的方式来管理对象,使得代码更加模块...
在本文中,我们将深入探讨如何在Spring Boot项目中集成MyBatis并实现自动分页功能。Spring Boot以其简洁的配置和强大的自动化配置能力,极大地简化了微服务开发过程。而MyBatis作为一款轻量级的持久层框架,能够灵活...
在Spring Boot和MyBatis框架下,我们常常需要实现数据的自动分页功能,以便于在Web应用中展示大量的数据而不会对性能造成过大压力。本教程将详细讲解如何利用拦截器来实现这一功能。 首先,我们需要理解Spring Boot...
PageHelper 是一个 MyBatis 的第三方分页插件,它可以自动完成分页参数的设置和结果集的转换。而自定义分页插件则允许开发者根据具体需求进行个性化定制。 在 MyBatis 中实现分页的基本步骤如下: 1. **配置分页...
MyBatis 提供了两种主要的分页实现方法:一种是通过在 Mapper XML 文件中直接编写分页 SQL,另一种是利用 MyBatis 的插件机制,如 PageHelper 插件,进行拦截器实现分页。这里我们主要讨论第一种方法,即“普通的...
2. **使用PageHelper插件**:PageHelper是MyBatis的第三方分页插件,通过简单的配置即可实现自动分页,且支持多种数据库。 **四、注意事项** 1. 分页效率优化:避免全表扫描,尽可能利用索引提升查询速度。 2. ...
本教程将详细讲解如何在Spring Boot项目中集成MyBatis,并利用分页插件实现高效的数据分页。 首先,我们需要在Spring Boot项目中引入MyBatis依赖。在`pom.xml`文件中添加以下Maven依赖: ```xml <groupId>org....
在本文中,我们将深入探讨如何在SpringBoot项目中整合MyBatis-Plus,实现多表分页查询。MyBatis-Plus是一个强大的MyBatis扩展,简化了对数据库的操作,包括CRUD操作以及复杂的关联查询。它提供了丰富的API,使得开发...
本篇将聚焦于MyBatis的代码自动生成和分页功能,特别是在MySQL数据库中的应用。 一、MyBatis代码生成器(MyBatis Generator) MyBatis Generator(MBG)是MyBatis官方提供的一个工具,可以自动生成Java模型类、...
总的来说,MyBatis 分页插件 PageHelper 是一个强大且易于使用的工具,它能够帮助开发者快速实现分页功能,提高开发效率,同时提供了一定的性能优化。无论是在小型项目还是大型项目中,它都是一个值得信赖的伙伴。
自己最近搭建的一个SpringMVC+Mybatis的框架 属于无实体类的框架 ... 并实现了Myabtis的自动分页和总数查询 只要传入分页参数便能自动查询总数和分页 总数封装在参数里面执行查询后可以直接从参数中获取
在本项目中,我们主要...综上所述,这个项目展示了如何在Spring MVC和MyBatis框架下实现一个完整的Web应用,通过PageHelper插件轻松实现分页查询功能。理解并掌握这些知识点,对于开发基于Java的Web应用是非常重要的。
MyBatis 分页拦截器是一种优化数据库操作的技术,它的主要目的是在不修改大量现有业务代码的情况下,实现对数据库查询结果的自动分页。在自动封装版的MyBatis分页拦截器中,开发者通常会创建一个拦截器类,该类会...
然后在Service层,可以通过Page对象传递分页参数,MyBatis会自动处理分页查询。 例如,在SpringMVC项目中,我们可能有以下步骤: - 创建自定义方言类,实现MyBatis的Dialect接口,覆盖`getLimitString()`方法。 - ...
1. **MyBatis分页插件**:MyBatis提供了PageHelper等分页插件,可以简化分页操作,通过配置即可实现自动分页。 2. **MyBatis动态SQL**:利用MyBatis的动态SQL,可以根据条件灵活构建SQL语句,实现复杂的查询需求。 ...