前台Excel文件批量插入MySQL数据库(Springboot+mybatis)

本篇文章主要讲解实现用户在前台选择读取excel文件,获取excel中数据进行插入MySQL数据库中对应的属性列。

html页面代码

//定义批量添加按钮
<a href="#button" class="button icon log" onclick="BatchAdditionWindow()">批量添加教师a>


//提升培训批量上传教师对话框
<div id="uploadBatchAddEnchangeTeacher" class="easyui-window" style="width:380px;padding:10px 40px" closed="true">
    <form id="upload" method="post" enctype="multipart/form-data">
        <table border="0" style="margin-top:4px;" width="100%" align="center">
            <tr>
                <td>
                    <input class="easyui-filebox" id="uploadFile" name="uploadFile" data-options="prompt:'文件上传', buttonText:'选择文件'" style="width:100%">input>
                td>
            tr>
        table>
    form>
    <div data-options="region:'south',border:false" style="text-align:center;padding:5px 0 0;">
        <a class="easyui-linkbutton" data-options="iconCls:'icon-ok'" href="javascript:void(0)" onclick="BatchAdditionTeacher();" style="width:80px">上传a>
    div>
div>

js代码控制

//打开文件上传对话框
    function BatchAdditionWindow() {
        var row = $('#ddg1').datagrid('getSelected');
        if(row) {
            $('#uploadBatchAddEnchangeTeacher').window('open').dialog('setTitle', '文件上传');
            $('#uploadFileName').value = "";
        }else{
            alert("请先选择批量添加培训教师信息的项目!");
        }
    }


    //
    //批量添加教师到项目中
    function BatchAdditionTeacher() {
        var uploadFile=document.getElementById("uploadFile");
        var filename=$(uploadFile).filebox('getValue');
        var str=filename.split(".");
        if(str[1]!="xls"&&str[1]!="xlsx") {
            $.messager.alert("错误", '只能上传Excel文件!', 'error');
            return;
        }
        var add="/batchAdditionTeacherToEnchange";
        $('#upload').form('submit',{
            url: add,
            onSubmit: function(){
            },
            success: function(result){
                var result = eval('('+result+')');
                if (result.success=="true"){
                    $('#uploadBatchAddEnchangeTeacher').window('close');
                    $('#aa1').datagrid('reload');
                    $.messager.show({
                        title: 'Success',
                        msg: '文件上传成功!'
                    });
                } else {
                    $.messager.show({
                        title: 'Error',
                        msg: '文件上传错误!'
                    });
                }
            }
        });
    }
    //]]>

//注意://这两行代码也要加上  js遇到的部分问题都可以用这两行代码解决

mapper代码

    @Insert("${sql}")
    public void batchAdditionTeacherToEnchange(@Param("sql") String sql);

service代码

public void batchAdditionTeacherToEnchange(List enchangeTrain_teacherList) throws  Exception{
        String sql="insert into enchangetrain_teacher values ";
        for (int i = 0; i < enchangeTrain_teacherList.size(); i++)
        {
            if (i == 0)
            {
                sql = sql + "(" + enchangeTrain_teacherList.get(i).getTno()+ "," +enchangeTrain_teacherList.get(i).getTrain_no()+ "," +enchangeTrain_teacherList.get(i).getTname()+ "," +enchangeTrain_teacherList.get(i).getGender()+ "," +enchangeTrain_teacherList.get(i).getWork_unit()+ "," +enchangeTrain_teacherList.get(i).age+ "," +enchangeTrain_teacherList.get(i).getTitle()+ "," +enchangeTrain_teacherList.get(i).getEducation_background()+ "," +enchangeTrain_teacherList.get(i).getDegree()+ "," +enchangeTrain_teacherList.get(i).getState()+ "," +enchangeTrain_teacherList.get(i).getEnrol_reviewer()+ "," +enchangeTrain_teacherList.get(i).getGraducation_audit()+ "," +enchangeTrain_teacherList.get(i).getTrain_grade()+ "," +enchangeTrain_teacherList.get(i).getRemarks() + ")";
            }
            else
            {
                sql = sql + ",(" + enchangeTrain_teacherList.get(i).getTno()+ "," +enchangeTrain_teacherList.get(i).getTrain_no()+ "," +enchangeTrain_teacherList.get(i).getTname()+ "," +enchangeTrain_teacherList.get(i).getGender()+ "," +enchangeTrain_teacherList.get(i).getWork_unit()+ "," +enchangeTrain_teacherList.get(i).age+ "," +enchangeTrain_teacherList.get(i).getTitle()+ "," +enchangeTrain_teacherList.get(i).getEducation_background()+ "," +enchangeTrain_teacherList.get(i).getDegree()+ "," +enchangeTrain_teacherList.get(i).getState()+ "," +enchangeTrain_teacherList.get(i).getEnrol_reviewer()+ "," +enchangeTrain_teacherList.get(i).getGraducation_audit()+ "," +enchangeTrain_teacherList.get(i).getTrain_grade()+ "," +enchangeTrain_teacherList.get(i).getRemarks() + ")";
            }
        }
            trainManagementMapper.batchAdditionTeacherToEnchange(sql);

    }

Controller代码

@RequestMapping(value="/batchAdditionTeacherToEnchange", method = RequestMethod.POST)
@ResponseBody
    public Map batchAdditionTeacherToEnchange(@RequestParam("uploadFile") MultipartFile file, HttpServletRequest request, HttpSession session) throws Exception {
        Map map=new HashMap<>();
        File uploadDir = new File("E:\\fileupload");
        //创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
        if (!uploadDir.exists()) uploadDir.mkdirs();
        //新建一个文件
        String path="E:\\fileupload\\temp.xlsx";
        File tempFile = new File(path);
        try {
            file.transferTo(tempFile);
            Workbook workbook=null;

            FileInputStream fis = new FileInputStream(tempFile);
            if(path.toLowerCase().endsWith("xlsx")){
                workbook = new XSSFWorkbook(fis);
            }else if(path.toLowerCase().endsWith("xls")){
                workbook = new HSSFWorkbook(fis);
            }
            Cell cell=null;
            List enchange_trainList=new ArrayList();
            for(int sheetIndex=0;sheetIndex//判断Excel中有几张表,目前只设定一张表
                Sheet sheet=workbook.getSheetAt(sheetIndex);//获取到sheet表
                if(!sheet.getSheetName().equals("提升培训用户信息")){
                    map.put("error","false");
                    return map;
                }
                for(int rowIndex=1;rowIndex<=sheet.getLastRowNum();rowIndex++){//获取到一行
                    Row row=sheet.getRow(rowIndex);
                    if(row==null){
                        continue;
                    }
                    EnchangeTrain_Teacher enchangeTrain_teacher=new EnchangeTrain_Teacher();

                    List strList=new ArrayList();
                    for(int i=0;iswitch (cell.getCellType()) {
                            case Cell.CELL_TYPE_STRING:// 字符串型
                                strList.add(cell.getRichStringCellValue().getString());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:// 数值型
                                if (DateUtil.isCellDateFormatted(cell)) { // 如果是date类型则 ,获取该cell的date值
                                    strList.add(cell.getDateCellValue().toString());
                                } else {// 纯数字
                                    strList.add(String.valueOf((int)cell.getNumericCellValue()));
                                    System.out.println(strList.get(i));
                                }
                        }
                    }

                    enchangeTrain_teacher.setTno(strList.get(0));
                    enchangeTrain_teacher.setTrain_no(strList.get(1));
                    enchangeTrain_teacher.setTname(strList.get(2));
                    enchangeTrain_teacher.setGender(strList.get(3));
                    enchangeTrain_teacher.setWork_unit(strList.get(4));
                    enchangeTrain_teacher.setAge(Integer.parseInt(strList.get(5)));
                    enchangeTrain_teacher.setTitle(strList.get(6));
                    enchangeTrain_teacher.setEducation_background(strList.get(7));
                    enchangeTrain_teacher.setDegree(strList.get(8));
                    enchangeTrain_teacher.setState(strList.get(9));
                    enchangeTrain_teacher.setEnrol_reviewer(strList.get(10));
                    enchangeTrain_teacher.setGraducation_audit(strList.get(11));
                    enchangeTrain_teacher.setTrain_grade(strList.get(12));
                    enchangeTrain_teacher.setRemarks(strList.get(13));
                    enchange_trainList.add(enchangeTrain_teacher);
                    System.out.println(enchangeTrain_teacher.toString());
                }
            }
            trainManagementService.batchAdditionTeacherToEnchange(enchange_trainList);
            deleteDirectory(path);
        } catch (Exception e) {
            e.printStackTrace();
        }
        map.put("success","true");
        return map;
    }

    //删除文件
    public static boolean deleteFile(String fileName) {
        File file = new File(fileName);
        // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                System.out.println("删除单个文件" + fileName + "成功!");
                return true;
            } else {
                System.out.println("删除单个文件" + fileName + "失败!");
                return false;
            }
        } else {
            System.out.println("删除单个文件失败:" + fileName + "不存在!");
            return false;
        }
    }

    //删除文件夹
    public static boolean deleteDirectory(String dir) {
        // 如果dir不以文件分隔符结尾,自动添加文件分隔符
        if (!dir.endsWith(File.separator))
            dir = dir + File.separator;
        File dirFile = new File(dir);
        // 如果dir对应的文件不存在,或者不是一个目录,则退出
        if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
            System.out.println("删除目录失败:" + dir + "不存在!");
            return false;
        }
        boolean flag = true;
        // 删除文件夹中的所有文件包括子目录
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            // 删除子文件
            if (files[i].isFile()) {
                flag = deleteFile(files[i].getAbsolutePath());
                if (!flag)
                    break;
            }
            // 删除子目录
            else if (files[i].isDirectory()) {
                flag = deleteDirectory(files[i]
                        .getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag) {
            System.out.println("删除目录失败!");
            return false;
        }
        // 删除当前目录
        if (dirFile.delete()) {
            System.out.println("删除目录" + dir + "成功!");
            return true;
        } else {
            return false;
        }
    }

效果展示

要插入的数据库中表结构如下:

前台Excel文件批量插入MySQL数据库(Springboot+mybatis)_第1张图片

数据插入前,前台显示信息如下:

前台Excel文件批量插入MySQL数据库(Springboot+mybatis)_第2张图片

插入信息时,选中编号为200002的提升培训,选取对应的excel表进行上传。excel表数据信息如下:

前台Excel文件批量插入MySQL数据库(Springboot+mybatis)_第3张图片

用户点击批量添加教师信息按钮,选择文件进行上传

前台Excel文件批量插入MySQL数据库(Springboot+mybatis)_第4张图片

上传文件成功后,可以看到,提升培训信息详情表格中多了一行工号为1的教师信息,前台展示信息如下:

前台Excel文件批量插入MySQL数据库(Springboot+mybatis)_第5张图片

你可能感兴趣的:(java,SSM+EasyUI信息管理,SSM项目开发,数据库)