最原始数据

  导入成功后

下载数据

下载后的数据显示

数据变成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导入和导出的更多相关文章

  1. Java中使用poi导入、导出Excel

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  2. POI导入和导出Excel总结

    POI导入和导出Excel总结   POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...

  3. POI 导入、导出Excel

    POI,全称Apache POI,是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.项目地址:Apache POI - t ...

  4. 关于excel导入、导出(POI)

    当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中, ...

  5. [转]Java中导入、导出Excel

    原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ...

  6. Java的导入与导出Excel

    使用Jakarta POI导入.导出Excel Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和 ...

  7. Java中导入、导出Excel

    原文:Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已 ...

  8. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  9. java导入、导出

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

随机推荐

  1. CentOS安装软件出现错误:bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

    CentOS安装软件出现错误: bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or d ...

  2. 139.00.009提高Github Clone速度

    @(139 - Environment Settings | 环境配置) Method 1 :SS+系统内置代理 用 git 内置代理,直接走系统中运行的代理工具中转,比如,你的 SS 本地端口是 1 ...

  3. AndroidStudio运行时出现错误:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled

    本来想调出MMDS,没想到报出这个错误: 最后发现原来是自己选Android Device Monitor不小心把Enable ADB Integration前面的√去掉了.点击工具栏中的Tools, ...

  4. Oracle基础之Merge into

    Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...

  5. 使用SDL2出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” 时的可能错误记录

    这几天在使用SDL2,之前一直都没有错,直到上午把项目搬了个地方.结果一直出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” . 看了网 ...

  6. 关于 Web 安全,99% 的网站都忽略了这些

    Web安全是一个如何强调都不为过的事情,我们发现国内的众多网站都没有实现全站https,对于其他安全策略的实践更是很少,本文的目的并非讨论安全和攻击的细节,而是从策略的角度引发对安全的思考和重视. 1 ...

  7. CentOS7 安装tomcat为系统服务器 Systemctl管理Tomcat,并设置开机启动

    本文转载:http://blog.chinaunix.net/uid-24648266-id-5729891.html CentOS7开始,从/etc/init.d脚本改为了systemctl管理服务 ...

  8. 批量检查多个网址是否正常(shell编程)

    #!/bin/bash #version 1.1 #by zengj #using checking urls . /etc/init.d/functions checkurl() { wget -o ...

  9. java时间操作工具类

    import java.sql.Timestamp;import java.text.DateFormat;import java.text.ParseException;import java.te ...

  10. java中的泛型2--注意的一些问题和面试题

    前言 这里总结一下泛型中需要注意的一些地方和面试题,通过面试题可以让你掌握的更清楚一些. 泛型相关问题 1.泛型类型引用传递问题 在Java中,像下面形式的引用传递是不允许的: ArrayList&l ...