springjdbc分页 mysql_基于spring JdbcTemplate改进版通用dao的使用及实现二:使用分页...

注意:本组件已重构并全新发布,更加方便易于使用。代码全部开源,详情访问 Github仓库 或 码云

在通用dao中,分页功能被封装的十分方便。

并且它可以和前面的各类查询、组合查询结合使用,完全不冲突。

另外,分页的封装是基于JdbcTemplate,也就是说你自己实现的其它各类dao也都可以使用它而非局限于默认提供的SuperDao。

你无须关心数据库类型,它会自动判断为你生成分页的sql查询,目前有oracle和mysql两种实现。

在你想要分页时,无须做任何修改,只要在前面添加一行PageControl.performPage(...),告诉通用dao需要分页就可以了。

见下面代码:

//方式一

User user = new User();

PageControl.performPage(user);

//将返回null,数据从PageControl中获取

superDao.queryList(user);

Pager pager1 = PageControl.getPager();

//方式二

PageControl.performPage(1, 10);

//将返回null,数据从PageControl中获取

superDao.queryList(User.class);

Pager pager2 = PageControl.getPager();

仍然是两种方式,传入实体或class对象。当然,这里的User继承了Pageable类,用来保存页面码等信息。

Pageable类主要有两个参数,页面和每页大小:

public class Pageable implements Serializable {

/** 每页显示条数 */

protected int itemsPerPage = 20;

/** 当前页码 */

protected int curPage = 1;

......

}

当使用分页后,原本dao调用的方法将返回null,之所以不返回数据是为了防止用户直接使用这个数据而忘记了分页的一些操作。

这样做的好处是可以强制用户从PageControl获取数据从而清空一些分页的信息,如页码、每页大小等,这是个好的习惯。

通过PageControl可以获取你想要的一切数据:

User user = new User();

PageControl.performPage(user);

//将返回null,数据从PageControl中获取

superDao.queryList(user);

Pager pager = PageControl.getPager();

//数据列表

List> users = pager.getList();

//可以这样直接完成转换,甚至直接转换到VO等其它对象

//List list = pager.getList(User.class);

//总记录数

int itemsTotal = pager.getItemsTotal();

//总页数

int pages = pager.getPages();

//当前页

int curPage = pager.getCurPage();

//每页大小

int itemsPerPage = pager.getItemsPerPage();

//pager.get...

使用混合查询时,照样可以使用分页:

PageControl.performPage(1, 10);

superDao.include("userId").where("userName", "in", new Object[] { "liyd", "selfly" })

.and("userId", ">=", new Object[] { 17L }).or("userId", "<=", new Object[] { 1L })

.asc("userId").queryList(User.class);

Pager pager = PageControl.getPager();

有时候,你可能并不需要知道总的记录数,可以指定最后一个参数为false:

//方式一

User user = new User();

PageControl.performPage(user,false);

//将返回null,数据从PageControl中获取

superDao.queryList(user);

Pager pager1 = PageControl.getPager();

//方式二

PageControl.performPage(1, 10,false);

//将返回null,数据从PageControl中获取

superDao.queryList(User.class);

Pager pager2 = PageControl.getPager();

这样,就不会执行总记录数count的查询,减少一次数据库查询的次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值