国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

教你使用java將excel數據導入MySQL

發(fā)布時(shí)間:2021-07-05 18:40 來(lái)源:腳本之家 閱讀:0 作者:從開(kāi)始到放棄再開(kāi)始 欄目: 開(kāi)發(fā)技術(shù)

目錄

一、pom文件

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.7</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

二、配置文件

server.port=8080

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

spring.datasource.url=jdbc:mysql://localhost:3306/ddb_resources?serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

三、mapper文件

@Mapper
public interface DdbBookNewWordMapper extends BaseMapper<DdbBookNewWord> {
}

四、service文件

@Service
public class DemoDAO {
    @Autowired
    DdbBookNewWordMapper mapper;
    
    public void save(List<DataDemo001> list) {
        // 如果是mybatis,盡量別直接調用多次insert,自己寫(xiě)一個(gè)mapper里面新增一個(gè)方法batchInsert,所有數據一次性插入
        DdbBookNewWord newWord = new DdbBookNewWord();
        System.out.println("插入數據開(kāi)始===============================");
        for (DataDemo001 info : list) {
            newWord.setAppType(0);
            newWord.setFkBookId(info.getFkBookId());
            newWord.setWord(info.getWord());
            newWord.setSimpleExplain(info.getSimpleExplain());
            newWord.setImgUrl("/incoming/ddb/wordImg/"+info.getFkBookId()+"/"+info.getImgUrl());
            newWord.setSoundUrl("/incoming/ddb/wordAudio/bookStudyMp3/"+info.getFkBookId()+"/"+info.getSoundUrl());
            newWord.setCreateTimeInMs(1620983400709L);
            newWord.setUpdateTimeInMs(1620983400709L);
            System.out.println(newWord);
            mapper.insert(newWord);
        }
        System.out.println("結束=========================");
    }
}

五、實(shí)體類(lèi)(數據庫對應)

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class DdbBookNewWord {
    private int id;
    private String fkBookId;
    private String word;
    private String simpleExplain;
    private String imgUrl;
    private long createTimeInMs;
    private long updateTimeInMs;
    private int appType;
    private String soundUrl;
}

六、excel對應的實(shí)體類(lèi)

@Data
public class DataDemo001 {
    private String fkBookId;
    private String bookeName;
    private String moudle;
    private String unit;
    private String word;
    private String soundUrl;
    private String imgUrl;
    private String simpleExplain;
}

七、監聽(tīng)器

// 有個(gè)很重要的點(diǎn) DemoDataListener 不能被spring管理,要每次讀取excel都要new,然后里面用到spring可以構造方法傳進(jìn)去
public class DataDemo001Listener extends AnalysisEventListener<DataDemo001> {

//    DemoDAO demoDAO = SpringContextHolder.getBean(DemoDAO.class);

    private static final Logger LOGGER = LoggerFactory.getLogger(DataDemo001Listener.class);
    /**
     * 每隔5條存儲數據庫,實(shí)際使用中可以3000條,然后清理list ,方便內存回收
     */
    private static final int BATCH_COUNT = 100;
    List<DataDemo001> list = new ArrayList<DataDemo001>();
    /**
     * 假設這個(gè)是一個(gè)DAO,當然有業(yè)務(wù)邏輯這個(gè)也可以是一個(gè)service。當然如果不用存儲這個(gè)對象沒(méi)用。
     */
    private DemoDAO demoDAO;
//
    public DataDemo001Listener(DemoDAO demoDAO) {
        // 這里是demo,所以隨便new一個(gè)。實(shí)際使用如果到了spring,請使用下面的有參構造函數
        this.demoDAO = demoDAO;
    }

    /**
     * 如果使用了spring,請使用這個(gè)構造方法。每次創(chuàng  )建Listener的時(shí)候需要把spring管理的類(lèi)傳進(jìn)來(lái)
     *
     * @param demoDAO
     */
//    public DataDemo001Listener(DemoDAO demoDAO) {
//        this.demoDAO = demoDAO;
//    }

    /**
     * 這個(gè)每一條數據解析都會(huì )來(lái)調用
     *
     * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     * @param context
     */
    @Override
    public void invoke(DataDemo001 data, AnalysisContext context) {
        System.out.println(JSON.toJSONString(data));
        list.add(data);
        // 達到BATCH_COUNT了,需要去存儲一次數據庫,防止數據幾萬(wàn)條數據在內存,容易OOM
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存儲完成清理 list
            list.clear();
        }
    }

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

    /**
     * 加上存儲數據庫
     */
    private void saveData() {
        demoDAO.save(list);
    }
}

八、測試類(lèi)

 String path = "D:\\java-demo\\kuang-poi\\";

    @Test
    public void simpleRead() {
        String fileName = path+"悠游閱讀成長(cháng)計劃-單詞部分.xls";
        // 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheet 文件流會(huì )自動(dòng)關(guān)閉
        EasyExcel.read(fileName, DataDemo001.class, new DataDemo001Listener(demoDAO)).sheet().doRead();
    }

九、啟動(dòng)類(lèi)(沒(méi)啥用)

@MapperScan("com.example.demo.mapper")
@ComponentScan({"com.example.demo.test","com.example.demo.service"})
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

十、結構

到此這篇關(guān)于教你使用java將excel數據導入MySQL的文章就介紹到這了,更多相關(guān)java將excel數據導入MySQL內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

AV中文字幕网免费观看| 色一情一乱一伦一区二区三区小说| 亚洲午夜成人精品无码| 成人H无码动漫在线观看| 被添出水全过程免费视频| 国产aⅴ激情无码久久久无码|