当前位置: 首页 > news >正文

鸡西建设网站腾讯云服务器

鸡西建设网站,腾讯云服务器,做五金上哪个网站推广,安徽城乡建设委员会的网站本文涵盖几乎现在java的web项目中分页的所有常用方法 文章目录一、limit关键字二、hibernate分页三、截取List查询结果分页(简单粗暴)四、mybatis框架pageHelper插件分页五、springData分页六、 mybatis-plus分页插件(PaginationInterceptor)一、limit关…

本文涵盖几乎现在java的web项目中分页的所有常用方法

文章目录

    • 一、limit关键字
    • 二、hibernate分页
    • 三、截取List查询结果分页(简单粗暴)
    • 四、mybatis框架pageHelper插件分页
    • 五、springData分页
    • 六、 mybatis-plus分页插件(PaginationInterceptor)

一、limit关键字

service层

@Service
@Transactional
public class ImplStudentService implements StudentService {@Resource
private  StudentDao  studentDao;@Overridepublic List<Student>  selectAllStudent(String province, Integer offset, Integer limit) {return studentDao.selectAll(province,offset,limit);}
}

sql语句

select * from student where province = #{province}  limit #{offset},#{limit}

二、hibernate分页

service层

  @Overridepublic List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {// 分页数据int[] startIdAndCount = new int[2];startIdAndCount[0] = pageNo * pageSize;startIdAndCount[1] = pageSize;return studentDao.selectStudentsByPage(startIdAndCount);}

dao层

@Override
public List findByHqlPage(int[] startIdAndCount) throws Exception {String hql = "...";try {Query query = getSession().createQuery(hql);// 设置分页if (startIdAndCount != null && startIdAndCount.length > 0) {int rowStartIdx = Math.max(0, startIdAndCount[0]);if (rowStartIdx > 0) {query.setFirstResult(rowStartIdx);// 设置开始取值的索引}if (startIdAndCount.length > 1) {int rowCount = Math.max(0, startIdAndCount[1]);if (rowCount > 0) {query.setMaxResults(rowCount);// 设置结束取值的索引}}}return query.list();} catch (RuntimeException re) {log.error("分页查询失败!", re);throw re;}
}

三、截取List查询结果分页(简单粗暴)

...
List<StudentEnroll> students = studentlDao.getAllStudents();
int count = 0;
if(studentEnrolls != null && studentEnrolls.size() > 0) {count = studentEnrolls.size();int fromIndex = pageNo * pageSize;int toIndex = (pageNo + 1) * pageSize;if(toIndex > count) {toIndex = count;}List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);
...

四、mybatis框架pageHelper插件分页

Spring整合:

导入pom.xml

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>

配置项目配置文件(我在spring和mybatis整合的配置文件中配置的,如果在mybatis核心配置文件中配置,参考官网,也可百度一下)

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 依赖数据源 --><property name="dataSource" ref="dataSource"/><!-- 注册加载myBatis映射文件 --><property name="mapperLocations"><array><value>classpath*:com/yyz/mapper/*Mapper.xml</value></array></property><!-- PageHelper分页配置 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使用下面的方式配置参数,一行配置一个,后面会有所有的参数介绍 --><value><!--helperDialect属性来指定分页插件使用哪种方言。-->helperDialect=mysql<!--分页合理化参数,设置为true时,pageNum<=0时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。-->reasonable=true<!--为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,可以配置 pageNum,pageSize,count,pageSizeZero,reasonable-->params=count=countSql<!--支持通过Mapper接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。-->supportMethodsArguments=true<!--默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页-->autoRuntimeDialect=true</value></property></bean></array></property><!-- 给数据库实体起别名 --><property name="typeAliasesPackage" value="com.yyz.entity;"/></bean>

SpringBoot整合:

<!--分页插件-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>最新版本</version>
</dependency>
#bybatis分页插件配置
pagehelper:helper-dialect: mysql  #数据库reasonable: truesupport-methods-arguments: trueparams: count=countSql

标题分页插件参数:

 分页插件提供了多个可选参数,这些参数使用时,按照上面配置方式中的示例配置即可。分页插件可选参数如下:dialect:默认情况下会使用 PageHelper 方式进行分页,如果想要实现自己的分页逻辑,可以实现
Dialect(com.github.pagehelper.Dialect) 接口,然后配置该属性为实现类的全限定名称。 使用自定义
dialect 实现时,下面的参数没有任何作用。helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005
的方式进行分页。offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true
时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。
当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者
RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0
时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。supportMethodsArguments:支持通过 Mapper
接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params
配置的字段中取值,查找到合适的值时就会自动分页。aggregateFunctions:默认为所有常见数据库的聚合函数,允许手动添加聚合函数(影响行数),所有以聚合函数开头的函数,在进行
count 转换时,会套一层。其他函数和列会被替换为 count(0),其中count列可以自己配置。

重要提示:
当 offsetAsPageNum=false 的时候,由于 PageNum 问题,RowBounds查询的时候 reasonable 会强制为 false。使用 PageHelper.startPage 方法不受影响。

@Override
public ResponseResult selectAllStudent(Integer pageNum, Integer pageSize) {Map<String,Object> map = new HashMap<>();PageHelper.startPage(pageNum,pageSize);List<Student>  students = studentMapper.selectAllStudents();PageInfo pageInfo = new PageInfo(students);long total = pageInfo.getTotal();map.put("result",pageInfo);map.put("count",total);return ResponseResultUtil.success(map);
}

详细请看 SpringBoot集成MyBatis的分页插件PageHelper

五、springData分页

service层

...
Sort.Order travelDate = new Sort.Order(Sort.Direction.DESC, "travelDate");
Sort.Order createdTime = new Sort.Order(Sort.Direction.DESC, "createdTime");
Sort sort = new Sort(travelDate, createdTime);
Pageable pageable = new PageRequest(page, pageSize, sort);
List<TravelItem> items = null;
try {items = travelRepository.getTravelItemsByTravelDateBetweenAndUserId(theStartDate, theEndDate, openId, pageable);
} catch (Exception e) {throw new DatabaseRelatedException("TravelRepository异常");
}...

dao层:接口继承的是PagingAndSortingRepository接口,也可继承子接口JpaRepository,注意二者都要加@Repository注解

六、 mybatis-plus分页插件(PaginationInterceptor)

spring,xml的整合方式:

<!-- spring xml 方式 -->
<property name="plugins"><array><bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"><property name="sqlParser" ref="自定义解析类、可以没有"/><property name="dialectClazz" value="自定义方言类、可以没有"/><!-- COUNT SQL 解析.可以没有 --><property name="countSqlParser" ref="countSqlParser"/></bean></array>
</property><bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize"><!-- 设置为 true 可以优化部分 left join 的sql --><property name="optimizeJoin" value="true"/>
</bean>

springboot的java配置类方式

//Spring boot方式
@Configuration
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MybatisPlusConfig {@Beanpublic PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false// paginationInterceptor.setOverflow(false);// 设置最大单页限制数量,默认 500 条,-1 不受限制// paginationInterceptor.setLimit(500);// 开启 count 的 join 优化,只针对部分 left joinpaginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));return paginationInterceptor;}
}

UserMapper.java 方法内容

public interface UserMapper {//可以继承或者不继承BaseMapper/*** <p>* 查询 : 根据state状态查询用户列表,分页显示* </p>** @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)* @param state 状态* @return 分页对象*/IPage<User> selectPageVo(Page<?> page, Integer state);
}
  • UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页
<select id="selectPageVo" resultType="com.baomidou.cloud.entity.UserVo">SELECT id,name FROM user WHERE state=#{state}
</select>
  • UserServiceImpl.java 调用分页方法
public IPage<User> selectUserPage(Page<User> page, Integer state) {// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分// page.setOptimizeCountSql(false);// 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询// 要点!! 分页返回的对象与传入的对象是同一个return userMapper.selectPageVo(page, state);
}

结语:

对象封装写法上,mybatis这一派的基本是使用的类型是Page,而springData这边使用的则是Pageable
传的很参数类似

本文是参考以下文章:
作者:riemann_
https://blog.csdn.net/riemann_/article/details/90454331
并在此基础上,增加mybatis-plus部分的分页配置。
再次优化或者转载请注明以上出处。

http://www.lbrq.cn/news/2687437.html

相关文章:

  • 天津建设局网站首页营销型网站建设步骤
  • 廊坊网页模板建站站长工具百科
  • 做任务网站有哪些内容网络优化公司
  • 网站做301还是302seo研究协会网app
  • 如何写网站建设方案seo综合查询接口
  • 微信公众号的微网站怎么做的淘宝运营
  • ai做网站网站广告接入
  • 培训销售网站建设怀柔网站整站优化公司
  • 企业网站建设后需要单独服务器百度客服在线咨询人工服务
  • 大学生互助联盟网站建设需求分析说明表小米口碑营销案例
  • 好的网站分享百度seo软件首选帝搜软件
  • 网页设计素材图片免费百度seo优化教程免费
  • 动态网站后台开发关键词包括哪些内容
  • 中文网站建设工具郑州免费做网站
  • 山东助企网站建设必应搜索
  • 如何做网站左侧导航条广告语
  • 邵阳建设网站的公司优化英文
  • 做问卷赚钱的网站网站目录
  • 祖传做网站优化什么
  • 广州网络营销网站建设专业网站推广引流
  • 网站制度建设存在的问题中国国际新闻
  • 发布建设网站营销培训课程视频
  • 做网站什么科目百度注册公司地址
  • 网站用什么语言做seozhun
  • php建设网站后台市场营销专业
  • 合肥做网站的企业百度图片
  • 用自建网站做外贸只要做好关键词优化
  • 侵入别人的网站怎么做优化王
  • 深圳企业公司做网站冯耀宗seo教程
  • 做网站买服务器360竞价推广怎么做
  • [ 数据结构 ] 时间和空间复杂度
  • 深入解析Windows系统下UDP绑定失败的原理与系统级解决方案
  • MATLAB实现遗传算法求解路网路由问题
  • AIStarter修复macOS 15兼容问题:跨平台AI项目管理新体验
  • Vue2篇——第二章 Vue从指令修饰符到侦听器的全面解析(重点)
  • 智能体革命:网络安全人的角色重塑与突围指南