分页
来源:互联网 发布:慈溪行知职业技术学校 编辑:程序博客网 时间:2024/06/15 22:49
医药采购项目分页方法
使用oracle的SQL分页实现。Oracle分页sql模板如下:
--Oracle分页SQLselect * from (select rownum page_num , sys1.* from ( --此处放任意SQL select * from sysuser )sys1 where rownum <= 30) sys2 where sys2.page_num > 20
dao
修改SysuserMapperCustom.xml中findSysuserList添加分页支持。
Oracle分页需要起始和结束下标,需要根据当前页码、每页显示数量、总条数(符合查询条件记录数)
引入工具类PageQuery.java计算起始和结束的下标。
使用方法:New构造pageQuery对象,调用setPageParams方法,传入总条数、每页显示数量、当前页码,该对象中的属性PageQuery_start和PageQuery_end计算出了起始和结束的下标。
将PageQuery对象传入mybatis,即在查询包装类QuerySysuserVo里加入PageQuery属性。
分页mapper.xml,在原有SQL上加上分页头和分页的尾。
<!-- 用户查询 --><select id="findSysuserList" parameterType="yycg.base.pojo.vo.SysuserQueryVo"resultType="yycg.base.pojo.vo.SysuserCustom"> <!-- 分页头 --><if test="pageQuery!=null">select page_2.*from (select page_1.*, rownum page_numfrom (</if>select * from (select SYSUSER.id,SYSUSER.userid,SYSUSER.username,SYSUSER.groupid,sysuser.USERSTATE,SYSUSER.sysid,decode(SYSUSER.Groupid,'1',(select mcfrom userjd whereid = sysuser.sysid),'2',(select mc from userjd whereid =sysuser.sysid),'3',(select mc from useryy where id =sysuser.sysid),'4',(select mc from usergys where id = sysuser.sysid))sysmcfromSYSUSER)sysuser<where><include refid="query_sysuser_where" /></where> <!-- 分页尾 --><if test="pageQuery!=null">) page_1 <![CDATA[ where rownum <= ${pageQuery.PageQuery_end}) page_2 where page_2.page_num >= ${pageQuery.PageQuery_start} ]]></if></select>
总条数:符合条件记录数(因为该分页方法需要先总条数作为参数,所以需要在mapper.xml中创建一个select,返回总条数,还有接口中也要加)
service
public interface UserService {Sysuser findSysuserById(String id);//根据条件查询结果集的List<SysuserCustom> findSysuserList(SysuserQueryVo sysuserQueryVo) throws Exception;//根据条件查询结果集的总数int findSysuserListCount(SysuserQueryVo sysuserQueryVo) throws Exception;}
action
调用service执行分页查询,准备PageQuery对象数据(包括起始和结束下标)。
先调用service查询出总数。
Datagrid加载数据列表时,固定向action方法传两个分页参数:page=1&rows=30,当前页码和每页显示个数
Action分页查询代码:
//用户查询页面的结果集//最终DataGridResultInfo通过@ResponseBody将java对象转成json@RequestMapping("/queryuser_result")public @ResponseBody DataGridResultInfo queryuser_result(SysuserQueryVo sysuserQueryVo,int page,//页码int rows//每页显示个数)throws Exception{//非空校验sysuserQueryVo = sysuserQueryVo!=null?sysuserQueryVo:new SysuserQueryVo();//查询列表的总数int total = userService.findSysuserCount(sysuserQueryVo);PageQuery pageQuery = new PageQuery();pageQuery.setPageParams(total, rows, page);sysuserQueryVo.setPageQuery(pageQuery);//分页查询,向sysuserQueryVo中传入pageQueryList<SysuserCustom> list = userService.findSysuserList(sysuserQueryVo);DataGridResultInfo dataGridResultInfo = new DataGridResultInfo();//填充 totaldataGridResultInfo.setTotal(total);//填充 rowsdataGridResultInfo.setRows(list);return dataGridResultInfo;}
淘淘商城分页实现
Mybatis分页插件 - PageHelper说明
如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。
该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
使用方法
第一步:把PageHelper依赖的jar包添加到工程中。官方提供的代码对逆向工程支持的不好,使用参考资料中的pagehelper-fix。
第二步:在Mybatis配置xml中配置拦截器插件:
<plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库--> <property name="dialect" value="mysql"/> </plugin></plugins>
第二步:在代码中使用
1、设置分页信息:service中加入PageHelper.startPage(1,10); 表示启用分页插件
//获取第1页,10条内容,默认查询总数count PageHelper.startPage(1, 10); //紧跟着的第一个select方法会被分页List<Country> list = countryMapper.selectIf(1);
2、取分页信息
//分页后,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
Page<Country> listCountry = (Page<Country>)list;
listCountry.getTotal();
3、取分页信息的第二种方法
//获取第1页,10条内容,默认查询总数countPageHelper.startPage(1, 10);List<Country> list = countryMapper.selectAll();//用PageInfo对结果进行包装PageInfo page = new PageInfo(list);//测试PageInfo全部属性//PageInfo包含了非常全面的分页属性assertEquals(1, page.getPageNum());assertEquals(10, page.getPageSize());assertEquals(1, page.getStartRow());assertEquals(19, page.getPages());assertEquals(1, page.getFirstPage());assertEquals(8, page.getLastPage());assertEquals(true, page.isFirstPage());assertEquals(false, page.isLastPage());assertEquals(false, page.isHasPreviousPage());assertEquals(true, page.isHasNextPage());
分页测试
@Testpublic void testPageHelper() throws Exception {//初始化spring容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");//获得Mapper的代理对象TbItemMapper itemMapper = applicationContext.getBean(TbItemMapper.class);//设置分页信息PageHelper.startPage(1, 30);//执行查询TbItemExample example = new TbItemExample();List<TbItem> list = itemMapper.selectByExample(example);//取分页信息PageInfo<TbItem> pageInfo = new PageInfo<>(list);System.out.println(pageInfo.getTotal());System.out.println(pageInfo.getPages());System.out.println(pageInfo.getPageNum());System.out.println(pageInfo.getPageSize());}
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- 分页
- java反转字符串
- Codeforces Round #397 B
- stm32F205程序移植到stm32F405片子,使用FPU时注意事项
- Mac OS X 安装 Consolas 字体
- Python2 之汉字编码为unicode问题(即类似\xc3\xa4)
- 分页
- C#--Winform项目核心模块--考勤模块(三)
- 忍
- KMP算法实现
- robot framework 的AutoItLibrary常用关键字
- POJ 1131 0ms通过测试;
- BZOJ-4034: [HAOI2015]树上操作 (树链剖分 入门题 子树整体修改 线段树 区间修改+查询)
- 《送你一颗子弹》精彩文章
- 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)