记一次Oracle分页任务

任务描述:

       前台传车两个值:车辆分类和车辆VIN码,在Oracle查询到数据之后,分页显示出来某些数据项。

1、前台

        写几个<div></div> class class,一个点击form,submit,  再写点XXXXXX,完成!

2、后台

      控制层:

@Controller
@RequestMapping("/testA")
public class VehicleLogController extends BaseController{
	int flag = 0;  
	@Autowired
	private VehicleService vehicleService;
	/**
	 * 查询车辆分类
	 * @return
	 */
	@RequestMapping("/testB")
	public ModelAndView loadAllVehicleLog(@RequestParam Map<String, String> param) throws Exception {
        int A = Integer.parseInt(request.getParameter(""));    //获取前台的值
        String B = request.getParameter("");                   //获取前台的值
		int offset = 0;
		if (request.getParameter("pager.offset") == null) {// pager.offset,taglib标签自带的属性
			offset = 0;
		} else {
			offset = Integer.parseInt(request.getParameter("pager.offset"));
		}
		int maxPageItems = 2;// 每页显示条数
		PageModel RData = vehicleService.selectAllVehicleLog(offset, maxPageItems, A, B);
		// 返回ModelAndView
		ModelAndView modelAndView = new ModelAndView();
		// 相当 于request的setAttribut,在jsp页面中通过itemsList取数据
		modelAndView.addObject("RData", RData );
		// modelAndView.setViewName("/WEB-INF/jsp/XXX/XXX.jsp");
		// 上边的路径配置可以不在程序中指定jsp路径的前缀和jsp路径的后缀
        // 下边的路径,如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为
		modelAndView.setViewName("XXX/XXX");
		return modelAndView;
	}
}

        关于全局变量 int flag = 0;  说明:点击翻页的时候,传进来的某个值因为下拉框选择问题,后面传进来的值可能不是第一次下拉框所选择的值,所以需要将第一次传进来的值保存下来。(举例:下拉框有库存,已售,修理3种选项,分别对应值1,2,3.我选择已售,点击查询,第一次查询后台的值确实是2,但是点击翻页之后,后台的值不一定是2了,所以我们需要把2这个值保存下来,方便后续使用),这个小问题,花了我一万多秒钟!!!真的可恶

     service层:

// 查询车辆分类
	@Override
	public PageModel selectAllVehicleLog(int offset, int maxPageItems, String vehicleLogNew, String vin) {	
		int pageTotal = total / maxPageItems;// 总页数
		if (total % maxPageItems != 0) {
			pageTotal = pageTotal + 1;
		}
		int currentPageNumber = offset / maxPageItems;// 当前页
		int startRN = currentPageNumber * maxPageItems + 1;// 分页起始数
		int endRN = currentPageNumber * maxPageItems + maxPageItems;// 分页截至数
		if (total <= maxPageItems) {
			endRN = total;
		}
        List<Map<String, Object>> list = jdbcTemplate.queryForList
(" SELECT * FROM (SELECT A.*, ROWNUM RN FROM tableA A WHERE ROWNUM <="+endRN+") WHERE RN >= "+startRN);
		PageModel pm = new PageModel();
		pm.setTotal(total);
		pm.setDatas(list); //结果集
		pm.setPageTotal(pageTotal);
		pm.setMaxPageItems(maxPageItems);
		return pm;
	}

  友情提醒:

          查询结果用一下排序,因为分页的时候,查询结果可能顺序不同,使用分页固定一下顺序是有必要的。我自己也在这坑里待了小半天,在公司大佬提醒下才反应过来。(鄙人菜鸟一枚)。

扫描二维码关注公众号,回复: 4185852 查看本文章

共同学习,共同挣钱!!!

         

猜你喜欢

转载自blog.csdn.net/qq_18937429/article/details/84099779