SSM+poi导入和导出

Posted dahei96

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSM+poi导入和导出相关的知识,希望对你有一定的参考价值。

技术分享图片最原始数据技术分享图片

  导入成功后

技术分享图片

下载数据

技术分享图片

下载后的数据显示

技术分享图片

数据变成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()+"	第二个值:"+User.getPassword()+"	第三个值:"+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导入和导出的主要内容,如果未能解决你的问题,请参考以下文章

基于SSM的POI导入导出Excel实战第二篇-导出EXCEL

java代码实现导出Excel表格工具ssm框架mavenidea

SSM中excel的导出以及poi的使用

POI操作Excel导入和导出

jsp使用webuploader上传excel mysql导入导出 apache-POI

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!