1. 程式人生 > >SSM+poi導入和導出

SSM+poi導入和導出

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導入和導出