分页

来源:互联网 发布:慈溪行知职业技术学校 编辑:程序博客网 时间: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());}


 

原创粉丝点击