ssm框架实现execl上传,并插入数据库功能

从前端最后到数据库,分为页面(jsp),Controller、service、mapper 。 比较简单但是使用的方法,没有封装成工具类感觉太麻烦。

用到了poi解析execl,给出pom.xml


		
		    org.apache.poi
		    poi
	    	3.7
	   

页面:(jsp),enctype="multipart/form-data"  上传文件必须写, target="message" 为了插入成功之后能返回页面信息提示

插入成功,显示提示信息实现:创建iframe,属性设置隐藏,将请求返回的信息写在里面,在通过js获取,弹窗显示。


js:

$(function() {
	$("#submitFile").click(function() {
		$("#fileForm").submit();
		$('#message').unbind('load').on('load', function() {
			var result = $("#message").contents().find('body').text();
			alert(result);
		});
	});
});co

Controller:

/**
	 * 导入用户
	 * 
	 * @param 
	 */
	@ResponseBody
	@RequestMapping(value = "/importShortTel")
	public String importTel(@RequestParam(value = "fileUser", required = false) MultipartFile file,
			HttpServletRequest request, HttpServletResponse response) {
		if (file == null) {
			return "获取文件失败";
		}
		// 文件名
		String fileName = file.getOriginalFilename();
		// 路径
		String path = request.getSession().getServletContext().getRealPath("upload");
		// 长度
		long size = file.getSize();
		if (fileName == null || ("").equals(fileName) && size == 0) {
			return "空文件或者文件名字为空";
		}
		if (fileName.indexOf(".xls") > 0) {
			// 创建存放上传文件的文件夹
			File filePath = new File(path);
			if (!filePath.exists()) {
				filePath.mkdirs();
			}
			// 保存
			File targetFile = new File(path, fileName);
			try {
				file.transferTo(targetFile);
				InputStream in = new FileInputStream(targetFile);

				HSSFWorkbook workbook = new HSSFWorkbook(in);// 创建对Excel工作薄
				HSSFSheet sheet = workbook.getSheetAt(0);
				// 调用Service,将数据插入Excel
				int i = shortTelService.importShortTel(sheet);
				if (i > 0) {
					return "导入成功";
				} else {
					return "导入失败";
				}
			} catch (IOException e) {
				return "存在异常"+e.getMessage();
			}
		}
		return "空文件或者文件不是execl";
	}

service:获取多少列以及每列的对应的类的属性自己设置,行通过for循环读取,读取完成的是一个List集合,在Mapper里会利用到批量插入

@Override
	public Integer importShortTel(HSSFSheet sheet) {
		// 获取该工作表的第一行
		HSSFRow row = null;
		// 获取该工作表的第一个单元格
		HSSFCell cell = null;

		// 存放短号的List
		List shortTelList = new ArrayList<>();
		for (int i = 1; i <= sheet.getLastRowNum(); i++) {
			// 在循环里面写,List保存的是引用,故在外边写会被覆盖,对象的地址相同
			ShortTel tel = new ShortTel();
			row = sheet.getRow(i);

			// 数字取整
			DecimalFormat df = new DecimalFormat("0");

			// 获取第I列 第一个单元格
			cell = row.getCell(0);
			if (null == cell) {
				continue;
			}
			if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
				String number = df.format(cell.getNumericCellValue());
				if (number.equals("")) {
					continue;
				}
			} else {
				if (cell.getRichStringCellValue().getString().equals("")) {
					continue;
				}
			}
			String shortTel = "";
			if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
				shortTel = df.format(cell.getNumericCellValue());
			} else {
				shortTel = cell.getRichStringCellValue().getString();
			}

			tel.setShortTel(shortTel);
			// 将放到list中
			shortTelList.add(tel);

		}

		return shortTelMapper.insertShortTelBatch(shortTelList);
	}

Mapper.xml


		insert into short_tel(short_tel)
		values
		 
		 	  (#{item.shortTel}) 
		 	
	

到此 插入成功,返回插入行数,判断是不是大于0,返回信息,在前端提示用户。

你可能感兴趣的:(ssm框架实现execl上传,并插入数据库功能)