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打印.这样在我们实际 ...
随机推荐
- flexviewer infowindow背景问题
flexiewer里遇到的一些问题 infoWindowRenderer问题 在arcgis api for flex中要设置infowindow的外观很容易,只需要在编写一下css文件即可,就如 e ...
- JavaScript JSON AJAX 同源策略 跨域请求
网页和Ajax和跨域的关系 1 Ajax使网页可以动态地.异步地的与服务器进行数据交互,可以让网页局部地与服务器进行数据交互 2 Ajax强调的是异步,但是会碰到跨域的问题. 3 而有很多技术可以解决 ...
- IE的兼容性设置 X-UA-Compatible
< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 是IE8 ...
- SQL Server 有序GUID,SequentialGuid,
问题描述 有序的GUID性能对比,堪比自增ID integer 一个大神告诉我NEWSEQUENTIALID() 在数据迁移的时候会有问题(感谢大神指点),所以我就深挖一下这个函数. 关于NEWSEQ ...
- 网络协议HTTP TCP/UDP 浏览器缓存 Restful(十)
一 TCP网络协议 1 建立TCP连接:三次握手原则 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分.客户端把这段连接的序号设定为随机数 A. 服务器端应当为一个合法的SY ...
- java代码修改了之后运行仍然是原程序
有的时候java代码改了之后但是运行的程序却没有发生改动,这是什么情况呢?可能懂得的人都觉得十分简单,但对于我这样的小白来说确实很费力.java代码更改后需要编译生成.class文件,说的直白点,这个 ...
- Eclipse 中 SVN 提交过滤
- IONIC屏幕方向锁定
如果希望阻止app在设备旋转时发生横屏,可以使用这个插件: cordova plugin add cordova-plugin-screen-orientation // set to either ...
- 【Leetcode】【Medium】Divide Two Integers
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- QA-IDEA中用maven配置项目无法加载JDBC
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Im building Maven Java Web application and w ...