最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文了解MyBatis Plus批量數(shù)據(jù)插入功能

 更新時(shí)間:2021年09月27日 09:49:28   作者:Java中文社群  
mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了MyBatis Plus批量數(shù)據(jù)插入功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近 Review 小伙伴代碼的時(shí)候,發(fā)現(xiàn)了一個(gè)小小的問(wèn)題,小伙伴竟然在 for 循環(huán)中進(jìn)行了 insert (插入)數(shù)據(jù)庫(kù)的操作,這就會(huì)導(dǎo)致每次循環(huán)時(shí)都會(huì)進(jìn)行連接、插入、斷開(kāi)連接的操作,從而導(dǎo)致一定的性能問(wèn)題,簡(jiǎn)化后代碼如下:

/**
 * 插入操作
 */
@RequestMapping("/save")
public Object save() {
    boolean flag = false; // 返回結(jié)果
    // 待添加(用戶(hù))數(shù)據(jù)
    for (int i = 0; i < 1000; i++) {
        User user = new User();
        user.setName("test:"+i);
        user.setPassword("123456");
        // 插入數(shù)據(jù)
        flag = userService.save(user);
        if(!flag) break;
    }
    return flag;
}

這樣做并不會(huì)改變程序最終的執(zhí)行結(jié)果,但會(huì)對(duì)程序的執(zhí)行效率帶來(lái)很大的影響,就好比你現(xiàn)在要從 A 地點(diǎn)送 10 件貨到 B 地點(diǎn),你可以選擇 1 次送 1 件,送 10 次的方案;也可以選擇 1 次送 10 件,送 1 次的方案,請(qǐng)問(wèn)你會(huì)選擇哪種?這就是多次循環(huán)插入和批量一次插入的問(wèn)題。​

PS:要插入的數(shù)據(jù)量越大,批量插入的時(shí)間(相比于循環(huán)多次插入來(lái)說(shuō))也越短、其優(yōu)勢(shì)也越大。

批量插入實(shí)現(xiàn)方案

本文我們使用 MyBatis-Plus(下文簡(jiǎn)稱(chēng) MP)自帶的 saveBatch 方法,來(lái)實(shí)現(xiàn)數(shù)據(jù)的批量插入功能,因?yàn)?MP 不是本文討論的重點(diǎn),所以這里咱們就不介紹了,如果有不熟悉的朋友可以去他的官方自行惡補(bǔ):https://baomidou.com/guide/,咱們本文重點(diǎn)介紹一下 MP 實(shí)現(xiàn)批量插入的具體步驟。

1.引入 MP 框架

首先,打開(kāi)您的 pom.xml 文件,在文件中添加以下內(nèi)容:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>mybatis-plus-latest-version</version>
</dependency>

注意:mybatis-plus-latest-version 表示 MP 框架的最新版本號(hào),可訪問(wèn) https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter 查詢(xún)最新版本號(hào),但在使用的時(shí)候記得一定要將上面的 “mybatis-plus-latest-version”替換成換成具體的版本號(hào),如 3.4.3 才能正常的引入框架。

2.創(chuàng)建數(shù)據(jù)庫(kù)和表

此步驟可省略,主要用于本文功能的實(shí)現(xiàn),創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表的腳本如下:

-- ----------------------------
-- 創(chuàng)建數(shù)據(jù)庫(kù)
-- ----------------------------
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP DATABASE IF EXISTS `testdb`;
CREATE DATABASE `testdb`;
USE `testdb`;

-- ----------------------------
-- 創(chuàng)建 user 表
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `createtime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- 添加測(cè)試數(shù)據(jù)
-- ----------------------------
INSERT INTO `user` VALUES (1, '趙云', '123456', '2021-09-10 18:11:16');
INSERT INTO `user` VALUES (2, '張飛', '123456', '2021-09-10 18:11:28');
INSERT INTO `user` VALUES (3, '關(guān)羽', '123456', '2021-09-10 18:11:34');
INSERT INTO `user` VALUES (4, '劉備', '123456', '2021-09-10 18:11:41');
INSERT INTO `user` VALUES (5, '曹操', '123456', '2021-09-10 18:12:02');

SET FOREIGN_KEY_CHECKS = 1;

3.具體代碼實(shí)現(xiàn)(重點(diǎn))

① 實(shí)體類(lèi)

先來(lái)創(chuàng)建數(shù)據(jù)庫(kù)所對(duì)應(yīng)的 User 實(shí)體類(lèi):

import lombok.Getter;
import lombok.Setter;

import java.util.Date;

@Getter
@Setter
public class User {
    private int id;
    private String name;
    private String password;
    private Date createtime;
}

② Controller 層代碼

本文的核心是使用 MP 框架中,IService 類(lèi)提供的 saveBatch 方法,來(lái)實(shí)現(xiàn)批量數(shù)據(jù)的插入功能,對(duì)應(yīng)在 Controller 中的實(shí)現(xiàn)代碼如下:

import com.example.demo.model.User;
import com.example.demo.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/u")
public class UserController {

    @Autowired
    private UserServiceImpl userService;

    /**
     * MP 批量插入
     */
    @RequestMapping("/savebatch")
    public boolean saveBatch() {
        List<User> list = new ArrayList<>();
        // 待添加(用戶(hù))數(shù)據(jù)
        for (int i = 0; i < 1000; i++) {
            User user = new User();
            user.setName("test:"+i);
            user.setPassword("123456");
            list.add(user);
        }
        // 批量插入
        return userService.saveBatch(list);
    }
}

③ Service 層代碼(重點(diǎn))

接下來(lái),我們要?jiǎng)?chuàng)建一個(gè) UserService 接口,繼承 MP 框架中的 IService 接口,實(shí)現(xiàn)代碼如下:

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.model.User;

public interface UserService extends IService<User> {

}

然后再創(chuàng)建一個(gè) UserService 的實(shí)現(xiàn)類(lèi):

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User>
        implements UserService {

}

PS:注意 UserServiceImpl 必須要繼承 MP 框架中的 ServiceImpl,不然要重寫(xiě)很多方法。

④ Mapper 層代碼

Mapper 層的實(shí)現(xiàn)相對(duì)來(lái)說(shuō)就比較簡(jiǎn)單了,只需要?jiǎng)?chuàng)建一個(gè) Mapper 類(lèi)繼承 MP 框架中的 BaseMapper 類(lèi)即可,實(shí)現(xiàn)代碼如下:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User>{

}

PS:BaseMapper 提供了對(duì)某個(gè)對(duì)象(類(lèi))最基礎(chǔ)的 CRUD 操作。

總結(jié)

本文我們介紹了 MP(MyBatis Plus)中實(shí)現(xiàn)批量插入的具體實(shí)現(xiàn)步驟,它的核心是通過(guò)調(diào)用 MP 中 IService 提供的 saveBatch 方法來(lái)完成的,但如果項(xiàng)目中沒(méi)有引入 MP 框架該如何處理?是不是使用了 MP 就可以躺平了呢?不著急,下篇我們?cè)倭呐坎迦氲牧硪环N方式(原生批量插入的實(shí)現(xiàn)方式),以及二者之間的優(yōu)缺點(diǎn)分析。

相關(guān)文章

  • web中拖拽排序和java后臺(tái)交互實(shí)現(xiàn)方法示例

    web中拖拽排序和java后臺(tái)交互實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于web中拖拽排序和java后臺(tái)交互實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 一小時(shí)迅速入門(mén)Mybatis之實(shí)體類(lèi)別名與多參數(shù) 動(dòng)態(tài)SQL

    一小時(shí)迅速入門(mén)Mybatis之實(shí)體類(lèi)別名與多參數(shù) 動(dòng)態(tài)SQL

    這篇文章主要介紹了一小時(shí)迅速入門(mén)Mybatis之實(shí)體類(lèi)別名與多參數(shù) 動(dòng)態(tài)SQL,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • metershpere實(shí)現(xiàn)調(diào)用自定義jar包中的方法

    metershpere實(shí)現(xiàn)調(diào)用自定義jar包中的方法

    在MeterSphere接口測(cè)試中,面對(duì)多層循環(huán)邏輯和邏輯判斷等復(fù)雜情況,直接編寫(xiě)測(cè)試用例往往顯得混亂不便,本文介紹了一個(gè)簡(jiǎn)化這一過(guò)程的方法:首先使用IDEA創(chuàng)建Maven工程,編寫(xiě)所需邏輯并生成jar包;然后在MeterSphere中上傳此jar包
    2024-10-10
  • 淺談Java開(kāi)發(fā)中的安全編碼問(wèn)題

    淺談Java開(kāi)發(fā)中的安全編碼問(wèn)題

    這篇文章主要介紹了淺談Java開(kāi)發(fā)中的安全編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Log4j 配置日志打印時(shí)區(qū)的實(shí)現(xiàn)方法

    Log4j 配置日志打印時(shí)區(qū)的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇Log4j 配置日志打印時(shí)區(qū)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • SpringBoot排除自動(dòng)加載數(shù)據(jù)源方式

    SpringBoot排除自動(dòng)加載數(shù)據(jù)源方式

    這篇文章主要介紹了SpringBoot排除自動(dòng)加載數(shù)據(jù)源方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 利用logback 設(shè)置不同包下的日志級(jí)別

    利用logback 設(shè)置不同包下的日志級(jí)別

    這篇文章主要介紹了利用logback 設(shè)置不同包下的日志級(jí)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • SpringBoot使用EmbeddedDatabaseBuilder進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試

    SpringBoot使用EmbeddedDatabaseBuilder進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試

    在開(kāi)發(fā)SpringBoot應(yīng)用程序時(shí),我們通常需要與數(shù)據(jù)庫(kù)進(jìn)行交互,為了確保我們的應(yīng)用程序在生產(chǎn)環(huán)境中可以正常工作,我們需要進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試,在本文中,我們將介紹如何使用 SpringBoot 中的 EmbeddedDatabaseBuilder 來(lái)進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試
    2023-07-07
  • Java中輸入被跳過(guò)情況的深入探究

    Java中輸入被跳過(guò)情況的深入探究

    這篇文章主要給大家介紹了關(guān)于Java中輸入被跳過(guò)情況的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • springboot基于Mybatis mysql實(shí)現(xiàn)讀寫(xiě)分離

    springboot基于Mybatis mysql實(shí)現(xiàn)讀寫(xiě)分離

    這篇文章主要介紹了springboot基于Mybatis mysql實(shí)現(xiàn)讀寫(xiě)分離,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

鹿邑县| 鹿泉市| 砚山县| 天峨县| 黔东| 旬阳县| 桑植县| 图们市| 明星| 牙克石市| 江源县| 师宗县| 万全县| 望江县| 古蔺县| 乐至县| 泸定县| 宝清县| 民乐县| 葵青区| 达尔| 长汀县| 沐川县| 北海市| 抚顺县| 葫芦岛市| 阿克陶县| 开封市| 余姚市| 岳阳县| 盈江县| 饶平县| 奉化市| 纳雍县| 昌江| 房产| 崇礼县| 岐山县| 龙岩市| 锡林浩特市| 南汇区|