# 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 后端复试题(已全部完成)

## 题目描述:
基于 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 批量导入学生信息:
## 导入成功:

## 代码遵循规范开发,注释率高,部分代码展示:
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