SSM+poi導入和導出
阿新 • • 發佈:2018-07-09
cati exception word except ota cto 定義 factory select
最原始數據
導入成功後
下載數據
下載後的數據顯示
數據變成16條
點擊導出可選擇
導了兩次 看數據變化
數據庫字段在下面地址給出
首先貼出Dao層
List<User> findAll(); void insertBatch(@Param("dataList") List<User> dataList); // 開始分頁 // 分頁查詢 List<User> findPager(@Param("pageno") Integer pageno, // 當前第幾頁(開始行號) @Param("pagesize") Integer pagesize, //結束行號 @Param("userName") String userName); // int getTotal(@Param("userName") String userName);
這是service層方法
Pager<User> findPager(@Param("pageno") Integer pageno, // 當前第幾頁(開始行號) @Param("pagesize") Integer pagesize, // 結束行號 @Param("userName") String userName);//參數 void insertBatch(@Param("dataList") List<User> dataList);
這是service的實現類
public User getUserById(int userId) { // TODO Auto-generated method stub return this.userDao.selectByPrimaryKey(userId); } public Pager<User> findPager(Integer pageno, Integer pagesize, String userName) { Pager<User> pager = new Pager<>(); //封裝分頁查詢結果集 pager.setRows(userDao.findPager(pageno, pagesize, userName)); //封裝分頁總頁數 pager.setTotal(userDao.getTotal(userName)); return pager; } //批量插入數據庫 @Override public void insertBatch(List<User> dataList) { // TODO Auto-generated method stub userDao.insertBatch(dataList); }
這是controller層 三個方法 一個遍歷所有數據 一個導入 一個導出
@Resource private IUserService userService; private static Log log = LogFactory.getLog(ClientController.class); /** * 上傳Excel,讀取Excel中內容 * @param file * @param request * @param response * @return * @throws IOException */ @RequestMapping(value = "/batchimport",method = RequestMethod.POST) public String batchimport(@RequestParam(value="filename") MultipartFile file, HttpServletRequest request,HttpServletResponse response) throws IOException{ log.info("ClientController ..batchimport() start"); String Msg =null; boolean b = false; //判斷文件是否為空 if(file==null){ Msg ="文件是為空!"; request.getSession().setAttribute("msg",Msg); return "client/client"; } //獲取文件名 String name=file.getOriginalFilename(); System.out.println(name); //進一步判斷文件是否為空(即判斷其大小是否為0或其名稱是否為null)驗證文件名是否合格 long size=file.getSize(); if(name==null || ("").equals(name) && size==0 && !WDWUtil.validateExcel(name)){ Msg ="文件格式不正確!請使用.xls或.xlsx後綴文檔。"; request.getSession().setAttribute("msg",Msg); return "client/client"; } //創建處理EXCEL ReadExcel readExcel=new ReadExcel(); //解析excel,獲取客戶信息集合。 List<User> dataList = readExcel.getExcelInfo(file); if(dataList != null && !dataList.toString().equals("[]") && dataList.size()>=1){ b = true; } userService.insertBatch(dataList); if(b){ //叠代添加客戶信息(註:實際上這裏也可以直接將UserList集合作為參數,在Mybatis的相應映射文件中使用foreach標簽進行批量添加。) for(User User:dataList){ //這裏可以做添加數據庫的功能 System.out.println("第一個值:"+User.getUserName()+"\t第二個值:"+User.getPassword()+"\t第三個值:"+User.getAge()); } Msg ="批量導入EXCEL成功!"; request.getSession().setAttribute("msg",Msg); }else{ Msg ="批量導入EXCEL失敗!"; request.getSession().setAttribute("msg",Msg); } return "client/client"; } private static Logger log=LoggerFactory.getLogger(UserController.class); @Resource private IUserService userService; @RequestMapping("/list") public @ResponseBody String list(@RequestParam(value = "userName", required = false) String userName, @RequestParam(value="rows" , required = false)Integer rows, @RequestParam(value="page" , required = false)Integer page ){ Integer pageno = (page - 1) * rows; Integer pagesize = rows; Pager<User> pager = userService.findPager(pageno,pagesize,userName); JsonConfig jc = new JsonConfig(); JSON json = JSONSerializer.toJSON(pager,jc); return json.toString(); } //導出excel @RequestMapping("/export.controller") public void export(String ids,HttpServletResponse response) throws IOException{ // 只是讓瀏覽器知道要保存為什麽文件而已,真正的文件還是在流裏面的數據,你設定一個下載類型並不會去改變流裏的內容。 //而實際上只要你的內容正確,文件後綴名之類可以隨便改,就算你指定是下載excel文件,下載時我也可以把他改成pdf等。 System.out.println(ids); response.setContentType("application/vnd.ms-excel"); // 傳遞中文參數編碼 String codedFileName = java.net.URLEncoder.encode("中文","UTF-8"); response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls"); List<User> list = new ArrayList<User>(); String[] array = ids.split(","); System.out.println(array); int[] id = new int[array.length]; for (int i = 0; i < id.length; i++) { User user = userService.getUserById(Integer.valueOf(array[i])); // 將數據添加到list中 list.add(user); } // 定義一個工作薄 Workbook workbook = new HSSFWorkbook(); // 創建一個sheet頁 Sheet sheet = workbook.createSheet("用戶信息"); // 創建一行 Row row = sheet.createRow(0); // 在本行賦值 以0開始 row.createCell(0).setCellValue("用戶id"); row.createCell(1).setCellValue("用戶名"); row.createCell(2).setCellValue("用戶密碼"); row.createCell(3).setCellValue("用戶年齡"); // 定義樣式 CellStyle cellStyle = workbook.createCellStyle(); // 格式化日期 //cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); // 遍歷輸出 for (int i = 1; i <= list.size(); i++) { User user1 = list.get(i - 1); row = sheet.createRow(i); row.createCell(0).setCellValue(user1.getId()); row.createCell(1).setCellValue(user1.getUserName()); row.createCell(2).setCellValue(user1.getPassword()); row.createCell(3).setCellValue(user1.getAge()); } OutputStream fOut = response.getOutputStream(); workbook.write(fOut); fOut.flush(); fOut.close(); }
大家可以去看源碼,都是借鑒網上資源整合的,當初找了個把星期,大多數沒有完整的純導入導出,現在奉獻給大家,輕踩勿噴,要的隨便拿,我放在碼雲上了https://gitee.com/wujianhui1996/SSM_POI 不會玩碼雲 demo在附件上。
還有三個工具類
字太多 我就不貼了 大家自己看 最重要的就是這兩個讀取下載的工具類了 還有一個封裝分頁的!
SSM+poi導入和導出