本次实例使用的是SSM框架,但是分页的原理都是一样的,所以便以这个框架下的分页方法为例。
首先:
分页查询时,在数据库(MySQL)中需要使用limit ?,?进行分页,2个参数分别为当前页码数,当前页面显示的条数,除此之外,我们还需要知道总记录数。
UserMapper.xml
<!--查询所有用户(分页)-->
<select id="findByPage" parameterType="java.util.Map" resultType="java.util.Map">
SELECT
<include refid="Base_Column_List"/>
from user
<if test="pageIndex >= 0 and pageSize > 0">
limit #{pageIndex},#{pageSize}
</if>
</select>
<!--取得记录总数-->
<select id="getCount" parameterType="java.util.Map" resultType="java.lang.Integer">
SELECT
count(1) as count
from user
</select>
接下来编写dao层的接口
因为传入的参数里包含当前页码数和当前页面显示条数两个参数,所以这里使用map来存放。
UserDao.java
//分页查询所有数据
List<Map<String,Object>> findByPage(Map<String,Object> map);
//获得所有记录数
int getCount(Map<String,Object> map);
Service层的接口以及他的实现类ServiceImpl
在service层的时候在一个实现方法里面调用dao层的两个方法。
UserService.java
//分页查询
PageInfo<List<Map<String,Object>>> findByPage(Map<String,Object> params);
UserServiceImpl.java
@Override
public PageInfo<List<Map<String,Object>>> findByPage(Map<String, Object> params) {
PageInfo pageInfo = new PageInfo<>();
pageInfo.setPageSize((Integer)params.get("pageSize"));
//获取总记录数
pageInfo.setTotalCount(userMapper.getCount(params)); pageInfo.setPageCount(pageInfo.getPageCount(pageInfo.getTotalCount(),pageInfo.getPageSize()));
pageInfo.setPageIndex((int)params.get("pageIndex"));
params.put("pageInfo",pageInfo);
//获取查询到的结果集
List<Map<String,Object>> list = userMapper.findByPage(params);
if(list.size()>0){
pageInfo.setResults(list);
}else{
pageInfo.setResults(null);
}
return pageInfo;
}
Controller层的实现
这里的Controller继承了BaseController里面的方法,
BaseController.java
@RequestMapping(value = "list",method = RequestMethod.GET, produces = "application/json; charset=utf-8")
@ResponseBody
public String list(T params,HttpServletRequest request,HttpServletResponse response) {
String json="";
String temp1 = request.getParameter("pageIndex");
String temp2 = request.getParameter("pageSize");
try {
int pageSize = temp2 == null ? ConstantParams.PAGE_SIZE : Integer.parseInt(temp2);
int pageIndex = temp1 == null ? (ConstantParams.PAGE_INDEX - 1) * pageSize : (Integer.parseInt(temp1) - 1) * pageSize;
PageInfo<E> page = findPage(params,pageSize,pageIndex,request);
ObjectMapper mapper = new ObjectMapper();
json = mapper.writeValueAsString(page);
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
//查询分页
PageInfo<List<Map<String,Object>>> findByPage(Map<String,Object> params);
UserController.java
@Override
protected PageInfo<List<Map<String,Object>>> findPage(User user, int pageSize, int pageIndex,HttpServletRequest request) {
Map<String,Object> map = BeanConvertUtils.beanConvertMap(user);
map.put("pageIndex",pageIndex);
map.put("pageSize",pageSize);
PageInfo<List<Map<String,Object>>> pageInfo = userService.findByPage(map);
return pageInfo;
}
以上就是分页查询的完整后台代码,至于前台的分页按钮,网上有较多现成的代码,这里就不做展示了。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。