# JeeSite 4 LXH **Repository Path**: xiaohaonb/jeesite4LXH ## Basic Information - **Project Name**: JeeSite 4 LXH - **Description**: Java 后端复试题,基于 jeesite 框架,完成 CRUD、通过 excel 批量导入用户信息。JeeSite是一个快速开发平台,也是一个后台开发框架,它是一个企业级快速开发解决方案,基于 Spring Boot 在线代码生成功能,采用经典开发模式。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-07-17 - **Last Updated**: 2022-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 后端复试题(已全部完成) ![](https://gitee.com/xiaohaonb/pic/raw/master/demo_pic.JPG) ## 题目描述: 基于 jeesite 框架,完成 CRUD、通过 excel 批量导入用户信息。 ## 题目要求及思路简要描述: 1.jeesite 本地部署运行 a.MySQL建立数据库jeesitexh b.application.yml中配置jdbc连接 c.com.jeesite.test.InitData.java,JUnit Test 运行单元测试,初始化数据表数据 d.Spring Boot Application本地部署运行,访问http://localhost:8980/js成功 e.默认账号:system,密码:admin 2.编写业务逻辑,添加学生表,完成CRUD student_id, 学生id Datatype : VARCHAR(36) 注:id由jeesite唯一性ID算法的工具类IdGen的preInsert方法生成 student _name, 学生姓名, Datatype : VARCHAR(20) student _sex, 学生性别, Datatype : VARCHAR(2) student _number,手机号码, Datatype : VARCHAR(16) CRUD: 增加学生数据,save(Student student) 删除学生数据,delete(Student student) 修改学生数据,updateStatus(Student student) 查询单条,分页学生数据,get,findPage(Student student) 3.通过 excel 批量导入用户信息 a.使用 Apache POI HSSF 对 Microsoft Excel 进行读和写操作 b.使用 springframework.web 的 MultipartFile 处理文件上传 c.StudentController控制层中,提供下载学生表模板接口,根据模板录入 d.StudentController控制层中,提供批量导入学生表Excel接口,实现导入 4.提交代码到自己的 gitee , gitee连接 https://gitee.com/xiaohaonb/jeesite4LXH/tree/master ## 核心模块文件结构: 位于web下src────main────java ``` com.jeesite.modules.student │ ├── dao // 学生表DAO接口 │ └── StudentDao // 学生表DAO接口 │ ├── entity // 核心 学生实体Entity │ └── Student // 学生表Entity │ ├── service // 核心 业务逻辑操作实现层 │ └── StudentService // 学生表Service │ ├── utils // 核心 文件处理 Excel操作 │ └── DownloadFileUtil // 用于下载学生表模板 │ └── ImportExcelUtil // 用于通过Excel批量导入学生信息 │ ├── web // 核心 学生CRUD相关接口api │ └── StudentController // 学生表Controller │ │ ├── application.yml // yml配置文件 ├── StudentDao.xml // Mybatis Dao Mapper ├── studentList.html // 前端html页面 ``` ## 演示图片: ## 登录主页(用户名:system,密码:admin): ## 点击下载学生表模板: ## excel 中填入学生信息: ## 通过 excel 批量导入学生信息: ## 导入成功: ![](https://gitee.com/xiaohaonb/pic/raw/master/demo_pic.JPG) ## 代码遵循规范开发,注释率高,部分代码展示: StudentService ```java /** * 学生表Service * @author 梁师豪LXH * @version 2021-07-17 */ @Service @Transactional(readOnly=false) public class StudentService extends CrudService { /** * 通过 Excel 批量导入学生信息 * @param file * @return */ public String importData(MultipartFile file) { // 空null异常处理 if (file == null){ throw new ServiceException(text("请选择导入的数据文件!")); } int successNum = 0; int failureNum = 0; StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); try{ // 获取文件名 String fileName = file.getOriginalFilename(); // 获取文件输入流 InputStream is = file.getInputStream(); // 通过导入Excel工具包ImportExcelUtil得到Excel中的学生信息List List list = ImportExcelUtil.get(is,fileName); // 遍历List中的Student进行save(insert)插入数据库 for (Student student:list) { this.save(student); } } catch (Exception e){ failureNum++; e.printStackTrace(); } if (failureNum > 0) { failureMsg.insert(0, "抱歉,导入失败!请先下载学生表模板再通过Excel批量导入 " ); throw new ServiceException(failureMsg.toString()); }else{ successMsg.insert(0, "通过 Excel 批量导入学生信息成功!"); } return successMsg.toString(); } ``` ImportExcelUtil ```java /** * 导入Excel工具包Util,用于通过Excel批量导入学生信息 * @author 梁师豪LXH * @version 2021-07-17 */ public class ImportExcelUtil { // 2003- 版本的excel private final static String excel2003L = ".xls"; // 2007+ 版本的excel private final static String excel2007U = ".xlsx"; /** * 从导入Excel中获取学生数据List * @param in * @param fileName * @throws Exception */ public static List get(InputStream in, String fileName) throws Exception{ // 创建Excel工作薄 Workbook work = getWorkbook(in, fileName); List list = new ArrayList<>(); Sheet sheet = null; Row row = null; //操作当前工作簿 sheet = work.getSheetAt(0); //开始读取Excel单元格数据 for (int j = sheet.getFirstRowNum()+1; j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); Student student = new Student(); //读取完数据后break退出循环 try { if (row.getCell(0)==null); } catch (NullPointerException e){ break; } //学生信息有3列,学生姓名,学生性别,手机号码 for(int y = 0;y<3;y++){ //单元格格式化为String row.getCell(y).setCellType(CellType.STRING); //取得学生姓名 if (y==0) student.setStudentName(row.getCell(0).getStringCellValue()); //取得学生性别 if (y==1) student.setStudentSex(row.getCell(1).getStringCellValue()); //取得手机号码 if (y==2) student.setStudentNumber(row.getCell(2).getStringCellValue()); } list.add(student); } return list; } //获取Workbook对象 public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception { Workbook wb = null; String fileType = fileName.substring(fileName.lastIndexOf(".")); if (excel2003L.equals(fileType)) { wb = new HSSFWorkbook(inStr); // 2003- } else if (excel2007U.equals(fileType)) { wb = new XSSFWorkbook(inStr); // 2007+ } else { throw new Exception("解析的文件格式有误!"); } return wb; } } ``` # 写在最后 ## 注意springframework.web 的 MultipartFile 文件上传时: 文件大小限制 ``` spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-request-size=1000MB ``` maxFileSize 单文件大小限制 maxRequestSize 总上传大小限制 ## 数据库初始化sql文件 地址:https://gitee.com/xiaohaonb/pic/blob/master/sql_jeesitexh.sql