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()+"\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导入和导出的更多相关文章
- Java中使用poi导入、导出Excel
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- POI导入和导出Excel总结
POI导入和导出Excel总结 POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...
- POI 导入、导出Excel
POI,全称Apache POI,是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.项目地址:Apache POI - t ...
- 关于excel导入、导出(POI)
当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中, ...
- [转]Java中导入、导出Excel
原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ...
- Java的导入与导出Excel
使用Jakarta POI导入.导出Excel Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和 ...
- Java中导入、导出Excel
原文:Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已 ...
- java导入、导出Excel文件
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- java导入、导出
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
随机推荐
- Android常用的图片加载库
Android常用的图片加载库 前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Uni ...
- C++异常安全
转自:http://www.cnblogs.com/zgfLawliet/p/3417308.html 异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异 ...
- 微信小程序——小程序的能力
小程序启动 通过app.json里pages字段可以获得页面路径,而写在 pages 字段的第一个页面就是这个小程序的首页(打开小程序看到的第一个页面),就像下面的代码中,小程序启动后的第一个页面就是 ...
- LearnHowToThink
一.BubbleSort and XListview 1.BubbleSort (1)analysis traverse.compare.exchange.cycle.optimize strateg ...
- RESTful架构及SOA架构简单解析
1.RESTful架构 本人也是刚接触ASP.NET开发,以下为自己简单的理解,并做了一些记录,表述不当或者错误之处还请指正,在此谢过. 首先,REST(REpresentational State ...
- eclipse通过maven进行打包并且对hdfs上的文件进行wordcount
在eclipse中配置自己的maven仓库 1.安装maven(用于管理仓库,jar包的管理) -1.解压maven安装包 -2.把maven添加到环境变量/etc/profile -3.添加mave ...
- DOS下常用命令
0,想进入某个驱动器,直接输入盘符即可.如:“d:”1,CD--进入指定目录 2,cls--清除显示器屏幕上的内容,使DOS提示符到屏幕左上角. 3,time--显示和设置DOS的系统时间 4,dir ...
- UML用例图间关系说明
用例间一般存在如下四种关系: 1."通信"关系(<<cmmunicate>>构造型): "通信"关系:使用实心的关联线或带<< ...
- 阅读Hibernate框架Session接口的源码的笔记
一.阅读Session接口的注释的理解.(看着注释翻译的,有些地方可能翻译的不太对,有疑问再看源文档) ①.Session的生命周期随着事务开始而开始,事务的结束而结束. 附原文:The lifecy ...
- 对HandlerExecutionChain类的理解分析
HandlerExecutionChain类比较简单,好理解. ==================================================================== ...