效果图:
准备工作:
1、要用到Hutool工具肯定要有它的jar包。jar包下载地址: hutool-all-5.8.10.jar
感兴趣可以去了解一下Hutool的官网:Hutool官网
2、准备一张需要上传的Excel表。这张表我相信应该和你的数据库字段基本都一样。这下面是我的表和数据库字段。
Excel表:
数据库字段:
执行步骤
1、导入刚刚下载的 hutool-all-5.8.10.jar到lib目录下。
2、写jsp页面代码:注意form表单后面必须要加enctype="multipart/form-data"
。
<form action="${pageContext.request.contextPath}/excel?method=customerImport" method="post" enctype="multipart/form-data">
<input type="file" name="customerImport">
<input type="submit" value="导入">
</form>
3、写servle层代码:
注意:servlet层需要加@MultipartConfig
注解
在写servlet层之前先了解Hutool工具关于处理Excel表格的几个方法。
1) 从流中读取Excel为ExcelReader(比如从ClassPath中读取Excel文件)
ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream("aaa.xlsx"));
2) 读取指定的sheet
ExcelReader reader;
//通过sheet编号获取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), 0);
//通过sheet名获取
reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), "sheet1");
3)读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<Map<String,Object>> readAll = reader.readAll();
4)UUID全称通用唯一识别码(universally unique identifier),JDK通过java.util.UUID提供了 Leach-Salz 变体的封装。在Hutool中,生成一个UUID字符串方法如下:
//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();
//生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();
以上方法按需灵活运用,具体更多方法可查看Hutool官网。
servlet层代码:
private void customerImport(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// 得到file内容,但不是你想要的那种数据格式
Part part = request.getPart("customerImport");
if (part.getSize()>0 && null != part){
InputStream in = part.getInputStream();
// Hutool工具包自带方法 ExcelUtil
ExcelReader reader = ExcelUtil.getReader(in,0);
//这里才是你想要的数据集
List<Map<String, Object>> mapList = reader.readAll();
for (Map<String,Object> map:mapList){
Customer customer = new Customer();
//让id自动生成(Hutool工具包自带函数)
String id = IdUtil.simpleUUID();
customer.setId(id);
customer.setName((String) map.get("姓名"));
customer.setSex((String) map.get("性别"));
customer.setBirthday((String) map.get("出生日期"));
String provinceName =(String) map.get("省份");
Province province = provinceService.findByName(provinceName);
customer.setProvince(province);
String cityName =(String) map.get("城市");
City city = cityService.findByName(cityName);
customer.setCity(city);
customer.setPhone((String) map.get("电话"));
customer.setEmail((String) map.get("邮箱"));
customer.setHobby((String) map.get("兴趣"));
customer.setAddress((String) map.get("地址"));
customer.setWechat((String) map.get("微信"));
customer.setQq((String) map.get("QQ"));
customer.setDescription((String) map.get("描述"));
customer.setPhoto((String) map.get("图片"));
// 获取当前时间(方法自己写的,非系统只带)
String currentTime = DateUtil.getCurrentTime();
customer.setCreateTime(currentTime);
// 调用插入方法
customerService.save(customer);
}
in.close();
response.sendRedirect(request.getContextPath()+"/customer?method=list");
} else {
PrintWriter writer = response.getWriter();
writer.write("<script>alert('请先选择文件再导入!!'); window.location.href='/customer?method=list' ;window.close();</script>");
response.getWriter().flush();
}
}
4、dao层代码:
@Override
public void save(Customer customer) {
con = JDBCUtil.getConnection();
String sql = "insert into customer values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
try {
ptmt = con.prepareStatement(sql);
ptmt.setString(1,customer.getId());
ptmt.setString(2,customer.getName());
ptmt.setString(3,customer.getSex());
ptmt.setString(4,customer.getBirthday());
ptmt.setString(5,customer.getProvince().getId());
ptmt.setString(6,customer.getCity().getId());
ptmt.setString(7,customer.getPhone());
ptmt.setString(8,customer.getEmail());
ptmt.setString(9,customer.getHobby());
ptmt.setString(10,customer.getAddress());
ptmt.setString(11,customer.getWechat());
ptmt.setString(12,customer.getQq());
ptmt.setString(13,customer.getDescription());
ptmt.setString(14,customer.getPhoto());
ptmt.setString(15,customer.getCreateTime());
ptmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.closeAll(rs,ptmt,con);
}
结束语:
学有所得,方可谓之学也!