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