1. 程式人生 > >記一次Oracle分頁任務

記一次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;
	}

  友情提醒:

          查詢結果用一下排序,因為分頁的時候,查詢結果可能順序不同,使用分頁固定一下順序是有必要的。我自己也在這坑裡待了小半天,在公司大佬提醒下才反應過來。(鄙人菜鳥一枚)。

 

 

 

共同學習,共同掙錢!!!