首页 > 其他分享 >若依框架 ------- 导入导出(Excel)

若依框架 ------- 导入导出(Excel)

时间:2023-02-20 14:06:48浏览次数:41  
标签:若依 String updateSupport Excel SysStudent ------- studentList 导入 student


导出

html页面

定义的按钮

<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:student:export">
<i class="fa fa-download"></i> 导出 </a>

映射的路径

exportUrl: prefix + "/export",

实体类
加入注解,导出谁就在谁上面加入注解---- @Excel

若依框架 ------- 导入导出(Excel)_若依框架

若依框架 ------- 导入导出(Excel)_数据_02

Controller层 

//导出
@Log(title = "学生管理", businessType = BusinessType.EXPORT)
@RequiresPermissions("system:student:export")
@PostMapping("/export")
@ResponseBody
public AjaxResult export(SysStudent student)
{
List<SysStudent> list = studentService.selectStudentList(student);
ExcelUtil<SysStudent> util = new ExcelUtil<SysStudent>(SysStudent.class);
return util.exportExcel(list, "学生数据");
}

导入
没有模板就不知道要导入什么,所以需要先有一个模板
导入的时候,因必要条件还要确定是否重复,出现两个一摸一样的就没有必要了吧,我这是学生表,所以还需要对其通过名字进行查询

HTML页面

<a class="btn btn-info" onclick="$.table.importExcel()" shiro:hasPermission="system:student:import">
<i class="fa fa-upload"></i> 导入 </a>

映射

importUrl: prefix + "/importStudent",//导入
importTemplateUrl: prefix + "/importTemplate",//导出模板

导入的前端页面

<!-- 导入区域 -->
<script id="importTpl" type="text/template">
<form enctype="multipart/form-data" class="mt20 mb10">
<div class="col-xs-offset-1">
<input type="file" id="file" name="file"/>
<div class="mt10 pt5">
<input type="checkbox" id="updateSupport" name="updateSupport" title="如果登录账户已经存在,更新这条数据。"> 是否更新已经存在的用户数据
  <a onclick="$.table.importTemplate()" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> 下载模板</a>
</div>
<font color="red" class="pull-left mt10">
提示:仅允许导入“xls”或“xlsx”格式文件!
</font>
</div>
</form>
</script>

Controller层

/**
* 下载模板
*/
@RequiresPermissions("system:student:view")
@GetMapping("/importTemplate")
@ResponseBody
public AjaxResult importTemplate()
{
ExcelUtil<SysStudent> util = new ExcelUtil<SysStudent>(SysStudent.class);
return util.importTemplateExcel("学生数据");
}
/**
* 导入
*/
@RequiresPermissions("system:student:import")
@PostMapping("/importStudent")
@ResponseBody
public AjaxResult importStudent(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<SysStudent> util = new ExcelUtil<SysStudent>(SysStudent.class);
List<SysStudent> studentList = util.importExcel(file.getInputStream());
String operName = ShiroUtils.getSysUser().getLoginName();
String message = studentService.importStudent(studentList, updateSupport, operName);
return AjaxResult.success(message);
}

service层

/**
* 导入学生数据
*
* @param studentList 学生数据列表
* @param updateSupport 是否更新支持,如果已存在,则进行更新数据
* @param operName 是否更新支持,如果已存在,则进行更新数据
* @return 结果
*/
public String importStudent(List<SysStudent> studentList, Boolean updateSupport, String operName) ;

serviceImpl层

/**
* 导入用户数据
*
* @param studentList 用户数据列表
* @param updateSupport 是否更新支持,如果已存在,则进行更新数据
* @param operName 操作用户
* @return 结果
*/
private static final Logger log = LoggerFactory.getLogger(SysStudentServiceImpl.class);
@Override
public String importStudent(List<SysStudent> studentList, Boolean updateSupport, String operName)
{
if (StringUtils.isNull(studentList) || studentList.size() == 0)
{
throw new BusinessException("导入用户数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
for (SysStudent student : studentList)
{
try
{
// 验证是否存在这个用户
SysStudent u = studentMapper.selectStudentByName(student.getStudentName() );
System.out.print(student.getStudentSex()+"");
if (StringUtils.isNull(u))
{
student.setStudentName(student.getStudentName());
this.insertStudent(student);
successNum++;
successMsg.append("<br/>" + successNum + "学校信息" + student.getStudentName() + " 导入成功");
}
else if (updateSupport)
{
student.setUpdateBy(operName);
this.updateStudent(student);
successNum++;
successMsg.append("<br/>" + successNum + "学校信息 " + student.getStudentName() + " 更新成功");
}
else
{
failureNum++;
failureMsg.append("<br/>" + failureNum + "学校信息" + student.getStudentName() + " 已存在");
}
}
catch (Exception e)
{
failureNum++;
String msg = "<br/>" + failureNum + "学校信息" + student.getStudentName() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0)
{
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new BusinessException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}

mapper层

mapper.xml
写一个根据姓名查询的方法,避免重复的

<select id="selectStudentByName" parameterType="String" resultMap="SysStudentResult">
<include refid="selectStudentVo"/>
where student_name = #{studentName}
</select>

mapper.java文件写方法

/**
* 通过学生姓名查询学生
*
* @param studentName 用户名
* @return 用户对象信息
*/
public SysStudent selectStudentByName(String studentName);

标签:若依,String,updateSupport,Excel,SysStudent,-------,studentList,导入,student
From: https://blog.51cto.com/u_15949848/6068466

相关文章

  • 若依框架 ------- 三级联动之下拉框查询
    联动因为是查询要放在查询的位置HTML页面(显示)<li>学生学校:<!--<selectid="school"name="sysSchool.schoolId">--><selectid="school"name="sysGrade.gradeSchool......
  • 若依框架 -------- vue3+element-plus(四)
    后端管理系统,前后端分离的框架若依管理后台,来看下vue3+element-plus版本。实现一个页面定义api请求gatewayPath分布式网关定义importrequestfrom'@/utils/request'impor......
  • 若依框架 -------- vue3+element-plus(三)
    后端管理系统,前后端分离的框架若依管理后台,来看下vue3+element-plus版本。静态文本assetsassets静态img、svg、stylemain.js ​​import'@/assets/styles/index.scss'/......
  • 若依框架 -------- vue3+element-plus(二)
    后端管理系统,前后端分离的框架若依管理后台,来看下vue3+element-plus版本。API后台接口请求user.js//查询用户列表exportfunctionlistUser(query){returnrequest({......
  • Docker-全面详解(学习总结---从入门到深化)
    一、什么是Docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。 什么是"集装箱技术"我们都知道码头里的集装箱是运载货物用的,它是一种按规......
  • HTML5+CSS3(十)-全面详解(学习总结---从入门到深化)
    ​​Display​​​​编辑 元素隐藏属性对比​​​​学习效果反馈 ​​​​文档流 ​​​​文档流产生的问题 ​​​​空格折叠​​​​元素无空隙​​​​脱离文档流​......
  • 若依框架---PageHelper分页(四)
    我们通过下载并查看​​PageHelper-Spring-Boot-Starter​​​源码,了解到​​PageHelper​​​是通过实现​​MyBatis​​​拦截器接口​​org.apache.ibatis.plugin.Interc......
  • 若依框架---PageHelper分页(三)
    在上一篇文章“​​若依系统分页工具学习-PageHelper篇二​​”中,我们阐述了PageHelper使用ThreadLocal来将分页参数保存在当前线程中。那么我们为什么却找不到若依项目中后......
  • 若依框架---PageHelper分页(十三)
      我们介绍了PageHelper中的cache包以及简单介绍了包中各个类的属性与方法;还介绍了Java中一种加载类的方式:​​Class.forName​​​,并且通过查看​​com.mysql.jdbc.Drive......
  • 若依框架---PageHelper分页(十四)
     在前几篇文章中,我们查看了PageHeler中的包 ​​com.github.pagehelper​​​以及子包​​com.github.pagehelper.cache​​​中的类与结构,并且借着​​cache​​​包......