废话不多说,直接上代码

先说excel文件上传

用的是poi框架 先贴maven配置

<!--    poi导入excel文件--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency>

前端表格+逻辑:

<form id="fileForm" action="/upload" method="POST" enctype="multipart/form-data"><input id="file" type="file" name="file" class="btn btn-outline-primary"/><input id="btnSubmitFile" type="button" value="upload file to /upload"/>
</form>

JavaScript对应代码

<script type="text/javascript">$(function () {$("#btnSubmitFile").click(function () {var form = new FormData(document.getElementById("fileForm"));$.ajax({url: "/upload",type: "post",data: form,processData: false,contentType: false,success: function(data) {$("#outputDiv").html(data);},error: function(e) {console.log(e);}});});});</script>

controller层

 /*** 上传excel保存在本地并加载* @param file* @return* @throws IOException* @throws InvalidFormatException*/@PostMapping("/upload")@ResponseBodypublic String upload(@RequestParam("file") MultipartFile file) throws IOException, InvalidFormatException {if (file.isEmpty()) {return "上传失败,请选择文件";}//加载文件至数据库并保存到本地String fileName = file.getOriginalFilename();String dir=System.getProperty("user.dir");String destFileName=dir+ File.separator +"uploadedfiles_"+fileName;System.out.println(destFileName);File destFile = new File(destFileName);file.transferTo(destFile);broadbandDao.loadBroadExcel(destFileName);return  "到你想回到的界面或者改函数类型为void";}

Dao层

/*** 加载账号文件至数据库* 2020/8/5* @param excelFileName*/public void loadBroadExcel(String excelFileName){String sql="INSERT INTO `broadband_account`(broad_username,broad_password,broad_cost) VALUES(?,?,?)"; //笔者的业务 无需理解// 读取Excel文件内容List<Broadband> readResult = BroadExcelReader.readExcel(excelFileName); //重点 相关代码在下一段Iterator<Broadband> iterator=readResult.iterator(); //笔者的业务 无需理解while (iterator.hasNext()) //笔者的业务 无需理解{Broadband broadband = iterator.next();jdbcTemplate.update(sql,broadband.getBroadUsername(),broadband.getBroadPassword(),broadband.getBroadCost());}}

BroadExcelReade.java (加载EXCEL数据类)

public class BroadExcelReader {private static Logger logger = Logger.getLogger(BroadExcelReader.class.getName()); // 日志打印类private static final String XLS = "xls";private static final String XLSX = "xlsx";/*** 根据文件后缀名类型获取对应的工作簿对象* @param inputStream 读取文件的输入流* @param fileType 文件后缀名类型(xls或xlsx)* @return 包含文件数据的工作簿对象* @throws IOException*/public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException {Workbook workbook = null;if (fileType.equalsIgnoreCase(XLS)) {workbook = new HSSFWorkbook(inputStream);} else if (fileType.equalsIgnoreCase(XLSX)) {workbook = new XSSFWorkbook(inputStream);}return workbook;}/*** 读取Excel文件内容* @param fileName 要读取的Excel文件所在路径* @return 读取结果列表,读取失败时返回null*/public static List<Broadband> readExcel(String fileName) {Workbook workbook = null;FileInputStream inputStream = null;try {// 获取Excel后缀名String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());// 获取Excel文件File excelFile = new File(fileName);if (!excelFile.exists()) {logger.warning("指定的Excel文件不存在!");return null;}// 获取Excel工作簿inputStream = new FileInputStream(excelFile);workbook = getWorkbook(inputStream, fileType);// 读取excel中的数据List<Broadband> resultDataList = parseExcel(workbook);return resultDataList;} catch (Exception e) {logger.warning("解析Excel失败,文件名:" + fileName + " 错误信息:" + e.getMessage());return null;} finally {try {if (null != workbook) {workbook.close();}if (null != inputStream) {inputStream.close();}} catch (Exception e) {logger.warning("关闭数据流出错!错误信息:" + e.getMessage());return null;}}}/*** 解析Excel数据* @param workbook Excel工作簿对象* @return 解析结果*/private static List<Broadband> parseExcel(Workbook workbook) {List<Broadband> resultDataList = new ArrayList<>();// 解析sheetfor (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {Sheet sheet = workbook.getSheetAt(sheetNum);// 校验sheet是否合法if (sheet == null) {continue;}// 获取第一行数据int firstRowNum = sheet.getFirstRowNum();Row firstRow = sheet.getRow(firstRowNum);if (null == firstRow) {logger.warning("解析Excel失败,在第一行没有读取到任何数据!");}// 解析每一行的数据,构造数据对象int rowStart = firstRowNum ; //+1可以忽略第一行 不加就从第0行开始int rowEnd = sheet.getPhysicalNumberOfRows();for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {Row row = sheet.getRow(rowNum);if (null == row) {continue;}Broadband resultData = convertRowToData(row);if (null == resultData) {logger.warning("第 " + row.getRowNum() + "行数据不合法,已忽略!");continue;}resultDataList.add(resultData);}}return resultDataList;}/*** 将单元格内容转换为字符串* @param cell* @return*/private static String convertCellValueToString(Cell cell) {if(cell==null){return null;}String returnValue = null;switch (cell.getCellType()) {case NUMERIC:   //数字Double doubleValue = cell.getNumericCellValue();// 格式化科学计数法,取一位整数DecimalFormat df = new DecimalFormat("0");returnValue = df.format(doubleValue);break;case STRING:    //字符串returnValue = cell.getStringCellValue();break;case BOOLEAN:   //布尔Boolean booleanValue = cell.getBooleanCellValue();returnValue = booleanValue.toString();break;case BLANK:     // 空值break;case FORMULA:   // 公式returnValue = cell.getCellFormula();break;case ERROR:     // 故障break;default:break;}return returnValue;}private static Broadband convertRowToData(Row row) {Broadband resultData = new Broadband();Cell cell;int cellNum = 0;cell = row.getCell(cellNum++);String busername=convertCellValueToString(cell); //获取第一格内容resultData.setBroadUsername(busername);// 获取密码cell = row.getCell(cellNum++); //下一列String password=convertCellValueToString(cell); //获取第二格内容resultData.setBroadPassword(password);//获取费用cell = row.getCell(cellNum++); //下一列Integer cost= Integer.parseInt(convertCellValueToString(cell)); //获取第三格内容 往后的递推一样resultData.setBroadCost(cost);return resultData;}
}

实现后台搜索功能

我的后台长这样

偷懒用的别人的bootstrap框架(捂脸)上面的上传文件也是别人的代码东拼西凑整合出来的(再次捂脸)
前段搜索栏代码+逻辑

<input id="search-input" class="form-control form-control-dark w-100" type="text" placeholder="Search" aria-label="Search" th:placeholder="${activeUri=='broadbands'?'搜索宽带账号':'搜索学生姓名'}"><ul class="navbar-nav px-3"><li class="nav-item text-nowrap"><a id="btn-search"  class="nav-link" href="#" >搜索</a></li></ul>
 $("#btn-search").click(function () {var keyword=$("#search-input").val();$("#search").attr("action","/broadbands"+keyword).submit();})

后端controller

 /*** * @param model* @return*/@GetMapping("/broadbands{keyword}")public String broadbandList(@PathVariable("keyword") String keyword, HttpServletRequest request,Model model){  //直接使用参数keyword就是搜索框内传来的关键字//这部分的逻辑代码就要根据自身业务根据关键字实现自己的搜索功能//就是利用keyword到数据库进行一个like查找 再返回结果封装成bean到前端给thymeleaf解析}

Springboot+thymeleaf实现excel文件上传+后台数据搜索相关推荐

  1. 7.3 MASS批量修改数据(Excel文件上传数据)

    7.3 MASS批量修改数据(Excel文件上传数据) 步骤1:输入事务码MASS进入 1处,输入需要修改的对象类型(参见对象类型清单) 2处,点击"执行"按钮 步骤2:选择需要修 ...

  2. SSM项目的excel文件上传并添加到数据库

    SSM项目的excel文件上传并添加到数据库(新手,不足之处请多多指教) 基于学校的课设,要用到excel文件的上传和数据库导入,在网上找了好多demo,最后找到一篇使用poi的,经过修改后,可以正常 ...

  3. java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载

    java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...

  4. 文本文件、Excel文件上传下传

    1.读取客户端Txt.Excel文件到内表:TEXT_CONVERT_XLS_TO_SAP TEXT_CONVERT_XLS_TO_SAP函数可以将本地的文本文件(列与列之间默认使用TAB键分开,但也 ...

  5. Antd多文件上传后台接收为null问题

    Antd多文件上传后台接收为null问题 在使用antd开发过程中,Upload组件的上传,一般是通过action配置后端接口地址,自动上传文件:但是当文件数量较多时,需要进行手动上传,但是手动上传后 ...

  6. java中excel文件上传

    java文件上传 excel文件上传的两种方式 1.使用ExcelsUtils上传文件 2.把文件转换成流上传(支持多sheet) 代码实现 第一种方式 ExcelsUtils.ReadMultipa ...

  7. Python+django网页设计入门(6):文件上传与数据导入

    前导课程: Python+django网页设计入门(5):自定义用户注册与登录功能 Python+django网页设计入门(4):用户登录与登录验证 Python+django网页设计入门(3):使用 ...

  8. SpringBoot+Vue+ElementUI实现文件上传与文件下载

    作者: Memory(星哥) Wechat:/QQ: 574373426 整理不易,感谢支持,欢迎 收藏 转发 分享 专注IT职业教育多年,学编程找星哥 SpringBoot+Vue+ElementU ...

  9. java jxl上传excel_JAVA JXL -----excel文件上传和解析

    Java 操作EXCEL 有比较常见的方法 一是使用开源JXL组件,另外一种是POI,POI相对应用更广泛,能够操作微软所有windows文档,但数据量大的情况下比较消耗内存,所以相对效率比较低. 这 ...

最新文章

  1. 有奖评选 | 2020年的AI技术公开课,你想听到哪些干货?
  2. PyCharm Python3操作数据库MySQL增删改查
  3. Python自动化运维开发----基础(四)列表基础
  4. [html] 在a标签中,怎样防止链接跳转?
  5. Android recycleview实现混合itemview,以及recycleview添加头部尾部
  6. [Android]利用run-as命令在不root情况下读取data下面的数据
  7. 在 Windows 中实现 Java 本地方法-Java native 关键词
  8. 信号识别 matlab库,EEG信号MATLAB分析平台设计 ——模式识别部分
  9. Appium:ios自动化环境搭建
  10. 终于搞定阿里云ftp的问题
  11. ThinkPHP5-商城小程序-web技术栈|
  12. Windows下安装神通数据库
  13. DXVA视频硬件加速
  14. chemdraw怎么画拐弯的箭头_使用ChemDraw Prime 15的箭头工具绘制出弧线箭头
  15. 解决微信大字体下H5布局混乱
  16. matlab程序中ode45,关于matlab中ode45的问题
  17. vue项目中嵌入软键盘(中文/英文)
  18. Python操作FTP服务器实现文件和文件夹的上传与下载,python清理ftp目录下的所有文件和非空文件夹
  19. HBase 集成 Phoenix 构建二级索引实践
  20. CF专题(长安大学)

热门文章

  1. Windows 10: The Next Chapter
  2. ibm750服务器维护,IBM服务器IBM Power 750
  3. 直播播放器API(播放器调用方法、参数、接口和事件)
  4. 微信小程序点击按钮弹出弹窗_微信小程序开发弹出框实现方法
  5. 浅谈列控系统的阶梯式分级速度控制中专有名词的表述问题
  6. MMrotate自定义数据集训练与验证格式转换脚本
  7. centos命令行初始化配置
  8. PHP对接网络游戏防沉迷实名认证系统
  9. 小型医疗门诊挂号系统 医院管理系统后台thinkphp内核源码
  10. 关于网狐棋牌的数据库