java excel导出
@GetMapping("/export")
public void export(HttpServletResponse response)throws Exception{
// 从数据库查询出所有的数据
List<User> list = userService.list();
// 通过工具类创建writer 写到磁盘路径
// ExcelWriter writer = ExcelUtil.getWriter(filesUploadPath + "/用户信息。xlsx");
// 在内存操作,写出浏览器
ExcelWriter writer = ExcelUtil.getWriter(true);
// 自定义标题别名
writer.addHeaderAlias("username","用户名");
writer.addHeaderAlias("password","密码");
writer.addHeaderAlias("nickname","昵称");
writer.addHeaderAlias("email","邮箱");
writer.addHeaderAlias("phone","电话");
writer.addHeaderAlias("address","地址");
writer.addHeaderAlias("createTime","创建时间");
writer.addHeaderAlias("avatarUrl","头像");
// 一次性写出list内的对象到excel 使用默认模式 强制输出标题 excel 写出
writer.write(list, true);
// 设置浏览器响应的格式
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
String fileName = URLEncoder.encode("用户信息", "utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xlsx");
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
out.close();
writer.close();
}
elcel导入
/**
* excel 导入
* @parm file
* @throws Exception
*/
@PostMapping("/import")
public Boolean imp(MultipartFile file)throws Exception{
InputStream inputStream = file.getInputStream();
ExcelReader reader = ExcelUtil.getReader(inputStream);
List<User> list = reader.readAll(User.class);
// List<User> list = reader.read(0,1,User.class);
System.out.println(list);
userService.saveBatch(list);
return true;
}
由于数据库与实体类之间的字段映射问题所谓实体类与数据库之间的映射,其实就是在java中创建一个类,用来存放数据库里的某一张表。但是,如果只是在纯粹的桌面端与web端开发中,没有使用到框架的化,其实字段与属性之间的映射要求并没有那么严格。但是,使用MyBatis框架之后,对于字段与属性之间的关系,是十分严格的。
所以excel 表头出现中文就会导致导入数据库中的数据为null
方法一: reader.addHeaderAlias 将表头一一对应为英文模式,
@PostMapping("/import")
public Boolean imp(MultipartFile file)throws Exception{
InputStream inputStream = file.getInputStream();
ExcelReader reader = ExcelUtil.getReader(inputStream);
reader.addHeaderAlias("用户名", "username");
reader.addHeaderAlias("密码", "password");
reader.addHeaderAlias("昵称", "nickName");
reader.addHeaderAlias("邮箱", "email");
reader.addHeaderAlias("电话", "phone");
reader.addHeaderAlias("地址", "address");
reader.addHeaderAlias("创建时间", "createTime");
reader.addHeaderAlias("头像", "avatarUrl");
List<User> list = reader.readAll(User.class);
// List<User> list = reader.read(0,1,User.class);
System.out.println(list);
userService.saveBatch(list);
return true;
}
方法二: @Alias 给实体类添加 @Alias 注解(如果类名上有注解,则使用注解指定的名称作为别名)
package com.majing.learning.mybatis.entity;
import org.apache.ibatis.type.Alias;
@Alias(value="User")
public class User {
private int id;
private String name;
private String password;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]";
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}