最原始数据

  导入成功后

下载数据

下载后的数据显示

数据变成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. Android热修复 Dex注入实现静默消灭bug

    当app上线后发现紧急bug,如果重新发布版本周期比较长,并且对用户体验不好,此时热修复就派上用场了.热修复就是为紧急bug而生,能够快速修复bug,并且用户无感知.针对热修复,阿里系先后推出AndF ...

  2. 为TextView增加onclick

    必须添加上 android:clickable="true"

  3. 【Udacity】数据的集中程度:众数、平均数和中位数

    重视Code Review 极致--目标是成为优秀的开发者 Data tells a story!(数据会讲故事) 分析过程对于建模非常的重要,可以帮助我们减少实际上不相关的特征被错误的加入到模型中, ...

  4. Goclipse的Eclipse插件包安装升级地址

    http://goclipse.github.io/releases/ Eclipse Software Site for Goclipse This URL is an Eclipse softwa ...

  5. 沉淀,再出发——在Hadoop集群之上安装hbase

    在Hadoop集群之上安装hbase 一.安装准备 首先我们确保在ubuntu16.04上安装了以下的产品,java1.8及其以上,ssh,hadoop集群,其次,我们需要从hbase的官网上下载并安 ...

  6. python 面向对象:类,作用域

    类(Class)和实例(Instance) 定义类是通过class关键字:class Student(object): pass class后面紧接着是类名,即Student接着是(object),表 ...

  7. ZT-Android深入浅出之Binder机 制

    转贴 不是原创! Android深入浅出之Binder机 制 一说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交 ...

  8. 一、异步编程模型(APM)

    一.概念 APM即异步编程模式的简写(Asynchronous Programming Model).大家在写代码的时候或者查看.NET 的类库的时候肯定会经常看到和使用以BeginXXX和EndXX ...

  9. 使用jMeter构造逻辑上有依赖关系的一系列并发请求

    相信前端开发工程师对CSRF(Cross-site request forgery)跨站请求伪造这个概念都非常熟悉,有的时候也简写成XSRF,是一种对网站的恶意利用. 尽管听起来像跨站脚本(XSS), ...

  10. Perl中的字符串操作函数

    1.$position = index(string,substring,skipchars): 该函数返回子串substring在字符串string中的位置,如果不存在,则返回-1:参数skipch ...