国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

easyExcel模板數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫

這篇具有很好參考價值的文章主要介紹了easyExcel模板數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

最近項目中需要用到Excel表格的上傳下載功能,于是選擇了EasyExcel這款工具,總的來說非常的好用,下面就做一個簡單的演示。

官方文檔地址?

  • EasyExcel · 語雀
  • Alibaba Easy Excel - 簡單、省內(nèi)存的Java解析Excel工具 | 首頁

一、依賴?

pom.xml?中需要添加的依賴

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.2.7</version>
</dependency>

二、創(chuàng)建實體類:和模板一致對應(yīng)?

這里用到了?@ExcelProperty?注解,這個注解很重要必要的一個注解,注解中的兩個參數(shù)value,index分別代表列名,列序號
1.value 通過標(biāo)題文本對應(yīng)
2.index 通過文本行號對應(yīng)

easyExcel模板數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫

package com.sinosoft.springbootplus.org.param;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * <pre>
 * 監(jiān)管機構(gòu)系統(tǒng)-考勤管理 導(dǎo)入
 * </pre>
 *
 * @author ljk
 * @date 2022-05-18
 */
@Data
@ContentRowHeight(21)
@HeadRowHeight(30)
@ColumnWidth(25)
public class JgjgPersonAttendanceImport {

    @ExcelProperty(value = {"地區(qū)"},index = 0)
    private String areaName;

    @ExcelProperty(value = {"處室"},index = 1)
    private String officeName;

    @ExcelProperty(value = {"姓名"},index = 2)
    private String personName;

    @ExcelProperty(value = {"請假類型"},index = 3)
    private String leaveType;

    @ExcelProperty(value = {"開始時間"},index = 4)
    private Date startTime;

    @ExcelProperty(value = {"結(jié)束時間"},index = 5)
    private Date endTime;

    @ExcelProperty(value = {"時長"},index = 6)
    private Integer time;

    @ExcelProperty(value = {"天數(shù)"},index = 7)
    private BigDecimal day;


}

三、監(jiān)聽器(easyexcel是在監(jiān)聽器層完成excel數(shù)據(jù)讀?。??

? ? ? ?由于讀取excel需要實現(xiàn)監(jiān)聽器,并且該監(jiān)聽器不能被spring容器管理,所以我們spring的注解不能在里面用,所以我們需要將service層的接口傳入該監(jiān)聽器,實現(xiàn)將excel的內(nèi)容存儲至數(shù)據(jù)庫中。

? ? ? ?有個很重要的點 監(jiān)聽器不能被spring管理,要每次讀取excel都要new,然后里面用到spring可以構(gòu)造方法傳進去

package com.sinosoft.springbootplus.org.domain.entity;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.sinosoft.springbootplus.org.convert.JgjgPersonAttendanceConvert;
import com.sinosoft.springbootplus.org.domain.service.JgjgPersonAttendanceDomain;
import com.sinosoft.springbootplus.org.param.JgjgPersonAttendanceImport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
/**
 * <pre>
 * 監(jiān)管機構(gòu)系統(tǒng)-考勤管理
 * </pre>
 *
 * @author ljk
 * @since 2022-05-20
 */
public class JgjgPersonAttendanceListener  extends AnalysisEventListener<JgjgPersonAttendanceImport> {
    private static final Logger LOGGER = LoggerFactory.getLogger(JgjgPersonAttendanceListener.class);
    /**
     * 每隔5條存儲數(shù)據(jù)庫,實際使用中可以3000條,然后清理list ,方便內(nèi)存回收
     */
    private static final int BATCH_COUNT = 5;
    List<JgjgPersonAttendanceImport> list = new ArrayList<JgjgPersonAttendanceImport>();

    private JgjgPersonAttendanceDomain jgjgPersonAttendanceDomain;

    public JgjgPersonAttendanceListener() {

    }

    public JgjgPersonAttendanceListener(JgjgPersonAttendanceDomain jgjgPersonAttendanceDomain) {
        this.jgjgPersonAttendanceDomain = jgjgPersonAttendanceDomain;
    }

    /**
     * 這個每一條數(shù)據(jù)解析都會來調(diào)用
     *
     * @param jgjgPersonAttendanceImport
     *            one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     * @param context
     */
    @Override
    public void invoke(JgjgPersonAttendanceImport jgjgPersonAttendanceImport, AnalysisContext context) {
        LOGGER.info("解析到一條數(shù)據(jù):{}", JSON.toJSONString(jgjgPersonAttendanceImport));
        list.add(jgjgPersonAttendanceImport);
        // 達(dá)到BATCH_COUNT了,需要去存儲一次數(shù)據(jù)庫,防止數(shù)據(jù)幾萬條數(shù)據(jù)在內(nèi)存,容易OOM
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存儲完成清理 list
            list.clear();
        }
    }

    /**
     * 所有數(shù)據(jù)解析完成了 都會來調(diào)用
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 這里也要保存數(shù)據(jù),確保最后遺留的數(shù)據(jù)也存儲到數(shù)據(jù)庫
        saveData();
        LOGGER.info("所有數(shù)據(jù)解析完成!");
    }

    /**
     * 加上存儲數(shù)據(jù)庫
     */
    private void saveData() {
        LOGGER.info("{}條數(shù)據(jù),開始存儲數(shù)據(jù)庫!", list.size());
        for (JgjgPersonAttendanceImport jgjgPersonAttendanceImport : list) {
            /*SimpleDateFormat formatTime = new SimpleDateFormat("yyyy-MM-dd");
            jgjgPersonAttendanceImport.setStartTime(formatTime.format(jgjgPersonAttendanceImport.getStartTime()));
            jgjgPersonAttendanceImport.setEndTime(formatTime.format(jgjgPersonAttendanceImport.getEndTime()));*/
            //判斷狀態(tài)重新賦值
            if (jgjgPersonAttendanceImport.getLeaveType().equals("病假")){
                jgjgPersonAttendanceImport.setLeaveType("0");
            }else if (jgjgPersonAttendanceImport.getLeaveType().equals("事假")){
                jgjgPersonAttendanceImport.setLeaveType("1");
            }else if (jgjgPersonAttendanceImport.getLeaveType().equals("產(chǎn)假")){
                jgjgPersonAttendanceImport.setLeaveType("2");
            }else if (jgjgPersonAttendanceImport.getLeaveType().equals("婚假")){
                jgjgPersonAttendanceImport.setLeaveType("3");
            }else if (jgjgPersonAttendanceImport.getLeaveType().equals("喪假")){
                jgjgPersonAttendanceImport.setLeaveType("4");
            }else if (jgjgPersonAttendanceImport.getLeaveType().equals("其他")){
                jgjgPersonAttendanceImport.setLeaveType("5");
            }
            JgjgPersonAttendance jgjgPersonAttendance =
                    JgjgPersonAttendanceConvert.INSTANCE.jgjgPersonAttendanceImportToJgjgPersonAttendance(jgjgPersonAttendanceImport);
            jgjgPersonAttendanceDomain.saveJgjgPersonAttendance(jgjgPersonAttendance);
        }
        LOGGER.info("存儲數(shù)據(jù)庫成功!");
    }
}

四、controller層?

//導(dǎo)入
    @PostMapping("/insertList")
    @ApiOperation(value = "獲取JgjgPersonAttendance導(dǎo)入", notes = "監(jiān)管機構(gòu)系統(tǒng)-導(dǎo)入")
    public void insetJgjgPersonAttendanceImport(MultipartFile file){
        jgjgPersonAttendanceServiceImpl.insetJgjgPersonAttendanceImport(file);
    }

五、service層?文章來源地址http://www.zghlxwxcb.cn/news/detail-404207.html

//導(dǎo)入
    public void insetJgjgPersonAttendanceImport(MultipartFile file){
        try {
            InputStream inputStream = file.getInputStream();
            EasyExcel.read(inputStream, JgjgPersonAttendanceImport.class, new JgjgPersonAttendanceListener(jgjgPersonAttendanceDomain)).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

到了這里,關(guān)于easyExcel模板數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包