分页

医药采购项目分页方法

使用oracle的SQL分页实现。Oracle分页sql模板如下:

--Oracle分页SQL
select *
  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_num
			from (
		</if>
		select * from (
		select SYSUSER.id,
		SYSUSER.userid,
		SYSUSER.username,
		SYSUSER.groupid,
		sysuser.USERSTATE,
		SYSUSER.sysid,
		decode(SYSUSER.Groupid,
		'1',
		(select mc
		from userjd where
		id = sysuser.sysid),
		'2',
		(select mc from userjd where
		id =
		sysuser.sysid),
		'3',
		(select mc from useryy where id =
		sysuser.sysid),
		'4',
		(select mc from usergys where id = sysuser.sysid)
		)
		sysmc

		from
		SYSUSER
		)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中传入pageQuery
		List<SysuserCustom> list = userService.findSysuserList(sysuserQueryVo);
		
		DataGridResultInfo dataGridResultInfo = new DataGridResultInfo();
		//填充 total
		dataGridResultInfo.setTotal(total);
		//填充  rows
		dataGridResultInfo.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条内容,默认查询总数count
PageHelper.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());

分页测试

@Test
public 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());
	}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值