記一次Oracle分頁任務
阿新 • • 發佈:2018-11-22
任務描述:
前臺傳車兩個值:車輛分類和車輛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; }
友情提醒:
查詢結果用一下排序,因為分頁的時候,查詢結果可能順序不同,使用分頁固定一下順序是有必要的。我自己也在這坑裡待了小半天,在公司大佬提醒下才反應過來。(鄙人菜鳥一枚)。
共同學習,共同掙錢!!!