No Spring环境Mybatis-Plus批量插入并返回主键的两种方式

这篇具有很好参考价值的文章主要介绍了No Spring环境Mybatis-Plus批量插入并返回主键的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

批量插入返回主键,spring,mybatis,java


批量插入,可以把Mybatis-Plus看作是Mybatis加强版;故Mybatis中的相关操作都可以在Mybatis-Plus中使用;在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。

下面是批量插入的Dao层接口
 


 一注解方式:

     直接撸代码:

   

package org.jd.data.netty.big.window.chat.frame.ui.room.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.jd.data.netty.big.window.chat.entity.SysRandomColor;

import java.util.List;


/**
 * <p>@Description:Mapper随机颜色服务接口</p>
 * <p>@Copyright: Copyright (c)2,023</p>
 * <p>@Company: 北京惠农科技有限公司</p>
 * <P>@Created Date :2023年03月19日</P>
 * <P>@version 1.0
 * <p>@author yh19166</p>
 */
@Mapper
public interface SysRandomColorMapper extends BaseMapper<SysRandomColor> {
    /**
     * 批量插入
     *
     * @param sysRandomColorList 集合参数
     * @return {@link Integer} 返回插入的总条数
     */
    @Insert("<script>" +
            "     insert into sys_random_color (color_zh_name,color_cn_name,color_hexadecimal,color_rgb_value,create_time,update_time) values " +
            " <foreach" +
            "     collection='aList' item='c' separator=','>(#{c.colorZhName},#{c.colorCnName},#{c.colorHexadecimal},#{c.colorRgbValue},#{c.createTime},#{c.updateTime})" +
            " </foreach>" +
            "</script>")
    @Options(useGeneratedKeys = true, keyProperty = "colorId")
    int batchSave(@Param("aList") List<SysRandomColor> sysRandomColorList);

}

 第二种: XML方式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jd.data.netty.big.window.chat.frame.ui.room.mapper.SysRandomColorMapper">

    <insert id="batchSave" useGeneratedKeys="true" keyProperty="colorId">
        insert into sys_random_color (color_zh_name,color_cn_name,color_hexadecimal,color_rgb_value,create_time,update_time)
        values
        <foreach collection="aList" item="c" separator=",">
            (#{c.colorZhName},#{c.colorCnName},#{c.colorHexadecimal},#{c.colorRgbValue},#{c.createTime},#{c.updateTime})
        </foreach>
    </insert>
</mapper>

测试实例:


package org.jd.data.netty.big.window.chat.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>@Description: 顾客入住信息领域模型</p>
 * <p>@Copyright: Copyright (c)2,023</p>
 * <p>@Company: 北京惠农科技有限公司</p>
 * <P>@Created Date :2023年03月19日</P>
 * <P>@version 1.0
 * <p>@author yh19166</p>
 */
@TableName("sys_random_color")
@Data
@NoArgsConstructor
public class SysRandomColor implements Serializable {
    /**
     * =========================================================================================
     * 注解名称    功能
     * @Setter 自动添加类中所有属性相关的 set 方法
     * @Getter 自动添加类中所有属性相关的 get 方法
     * @Builder 使得该类可以通过 builder (建造者模式)构建对象
     * @RequiredArgsConstructor 生成一个该类的构造方法,禁止无参构造
     * @ToString 重写该类的toString()方法
     * @EqualsAndHashCode 重写该类的equals()和hashCode()方法
     * @Data 等价于上面的@Setter、@Getter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode
     * ===========================================================================================
     */

    @TableField(exist = false)
    // 不需要为该字段生成get方法
    @Getter(AccessLevel.NONE)
    @Setter(AccessLevel.NONE)
    private static final long serialVersionUID = 1L;

    /**
     * 颜色ID
     */
    @TableId(value = "color_id", type = IdType.AUTO)
    private Long colorId;

    /**
     * 中文名称
     */
    @TableField(value = "color_zh_name")
    private String colorZhName;

    /**
     * 英文名称
     */
    @TableField(value = "color_cn_name")
    private String colorCnName;

    /**
     * 16进制
     */
    @TableField(value = "color_hexadecimal")
    private String colorHexadecimal;

    /**
     * 颜色RGB值
     */
    @TableField(value = "color_rgb_value")
    private String colorRgbValue;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;


    @Override
    public String toString() {
        return "SysRandomColor{" +
                ", colorId = " + colorId +
                ", colorZhName = " + colorZhName +
                ", colorCnName = " + colorCnName +
                ", colorHexadecimal = " + colorHexadecimal +
                ", colorRgbValue = " + colorRgbValue +
                ", createTime = " + createTime +
                ", updateTime = " + updateTime +
                "}";
    }
}


测试类:


package org.jd.data.frame.big.window.service;


import cn.hutool.core.convert.Convert;
import org.jd.data.netty.big.window.chat.entity.SysRandomColor;
import org.jd.data.netty.big.window.chat.frame.ui.room.provider.SysRandomColorProvider;
import org.jd.data.netty.big.window.chat.util.FileReaderLineUtil;
import org.jd.data.netty.big.window.chat.util.handler.BeanInstanceFactoryHandler;
import org.junit.Before;
import org.junit.Test;

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

public class SysRandomColorProviderTest {

    private Optional<SysRandomColorProvider> sysRandomColorProviderInstance;

    @Before
    public void init() {
        sysRandomColorProviderInstance = BeanInstanceFactoryHandler.getBeanInstance(SysRandomColorProvider.class);
    }

    @Test
    public void saveSysRandomColor() {
        if (sysRandomColorProviderInstance.isPresent()) {
            SysRandomColorProvider sysRandomColorProvider = sysRandomColorProviderInstance.get();
            Optional<List<FileReaderLineUtil.RandomColor>> result = FileReaderLineUtil.productColor();
            if (result.isPresent()) {
                List<SysRandomColor> targetList = new ArrayList<>();
                result.get().stream().forEach(e -> {
                    // 相同字段属性间的拷贝
                    SysRandomColor sysRandomColor = Convert.convert(SysRandomColor.class, e);
                    targetList.add(sysRandomColor);
                });
                int n = sysRandomColorProvider.batchSaveRandomColor(targetList);
                System.out.println("返回插入的总条数: " + n);
            }

        }
    }

    @Test
    public void list() {
        if (sysRandomColorProviderInstance.isPresent()) {
            SysRandomColorProvider sysRandomColorProvider = sysRandomColorProviderInstance.get();
            List<SysRandomColor> resultList = sysRandomColorProvider.list(null, null);
            System.out.println("resultList: "+resultList);
        }
    }
}


 数据提供者:

package org.jd.data.netty.big.window.chat.frame.ui.room.provider;

import org.jd.data.netty.big.window.chat.entity.SysRandomColor;
import org.jd.data.netty.big.window.chat.frame.ui.room.service.SysRandomColorService;
import org.jd.data.netty.big.window.chat.frame.ui.room.service.impl.SysRandomColorServiceImpl;
import org.jd.data.netty.big.window.chat.util.instance.annotion.AutoInstanceServiceBean;

import java.util.List;

public class SysRandomColorProvider {


    private SysRandomColorService sysRandomColorService;

    @AutoInstanceServiceBean(value = SysRandomColorServiceImpl.class)
    public void setSysRandomColorService(SysRandomColorService sysRandomColorService) {
        this.sysRandomColorService = sysRandomColorService;
    }

    public int saveRandomColor(SysRandomColor sysRandomColor){
        return sysRandomColorService.saveSysRandomColor(sysRandomColor);
    }

    public int batchSaveRandomColor(List<SysRandomColor> randomColorList){
        return sysRandomColorService.batchSaveRandomColor(randomColorList);
    }

    public List<SysRandomColor> list(String colorZhName,String colorCnName){
        return sysRandomColorService.list(colorZhName,colorCnName);
    }
}


 服务接口及实现类:文章来源地址https://www.toymoban.com/news/detail-705042.html



package org.jd.data.netty.big.window.chat.frame.ui.room.service;


import org.jd.data.netty.big.window.chat.entity.SysRandomColor;
import java.util.List;

/**
 * <p>@Description: 随机颜色服务接口</p>
 * <p>@Copyright: Copyright (c)2,023</p>
 * <p>@Company: 北京惠农科技有限公司</p>
 * <P>@Created Date :2023年03月19日</P>
 * <P>@version 1.0
 * <p>@author yh19166</p>
 */
public interface SysRandomColorService{

    int saveSysRandomColor(SysRandomColor sysRandomColor);

    int batchSaveRandomColor(List<SysRandomColor> sysRandomColorList);

    /**
     * 获取所有随机颜色记录
      * @param colorZhName
     * @param colorCnName
     * @return {@link List<SysRandomColor>}
     */
    List<SysRandomColor> list(String colorZhName,String colorCnName);

}


package org.jd.data.netty.big.window.chat.frame.ui.room.service.impl;


import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.session.SqlSession;
import org.jd.data.netty.big.window.chat.entity.SysRandomColor;
import org.jd.data.netty.big.window.chat.frame.ui.contant.SsyConstant;
import org.jd.data.netty.big.window.chat.frame.ui.room.mapper.SysRandomColorMapper;
import org.jd.data.netty.big.window.chat.frame.ui.room.service.SysRandomColorService;
import org.jd.data.netty.big.window.chat.util.ProxyDruidPoolUtil;

import java.util.List;

/**
 * <p>@Description: 房间类型信息服务实现类</p>
 * <p>@Copyright: Copyright (c)2,023</p>
 * <p>@Company: 北京惠农科技有限公司</p>
 * <P>@Created Date :2023年03月19日</P>
 * <P>@version 1.0
 * <p>@author yh19166</p>
 */
public class SysRandomColorServiceImpl implements SysRandomColorService {

    private SysRandomColorMapper sysRandomColorMapper;

    @Override
    public int saveSysRandomColor(SysRandomColor sysRandomColor) {
        SqlSession session = ProxyDruidPoolUtil.getSession();
        int result;
        try {
            sysRandomColorMapper = session.getMapper(SysRandomColorMapper.class);
            result = sysRandomColorMapper.insert(sysRandomColor);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            result = SsyConstant.INSERT_DATABASE_ERROR;
            session.rollback();
        } finally {
            sysRandomColorMapper = null; // 帮助垃圾回收
            session.close();
        }
        return result;
    }

    /**
     * 返回总条数
     *
     * @param sysRandomColorList
     * @return
     */
    @Override
    public int batchSaveRandomColor(List<SysRandomColor> sysRandomColorList) {
        SqlSession session = ProxyDruidPoolUtil.getSession();
        int result;
        try {
            sysRandomColorMapper = session.getMapper(SysRandomColorMapper.class);
            result = sysRandomColorMapper.batchSave(sysRandomColorList);
            session.commit();
        } catch (Exception e) {
            session.rollback();
            result = SsyConstant.INSERT_DATABASE_ERROR;
        } finally {
            sysRandomColorMapper = null; // 帮助垃圾回收
            session.close();
        }
        return result;
    }

    @Override
    public List<SysRandomColor> list(String colorZhName, String colorCnName) {
        SqlSession session = ProxyDruidPoolUtil.getSession();
        try {
            QueryWrapper<SysRandomColor> queryWrapper = new QueryWrapper<>();
            queryWrapper.lambda()
                    .eq(StrUtil.isNotEmpty(colorCnName), SysRandomColor::getColorCnName, colorCnName)
                    .eq(StrUtil.isNotEmpty(colorZhName), SysRandomColor::getColorZhName, colorZhName)
                    .orderByAsc(SysRandomColor::getCreateTime);
            sysRandomColorMapper = session.getMapper(SysRandomColorMapper.class);
            return sysRandomColorMapper.selectList(queryWrapper);
        } catch (Exception e) {
            return null;
        } finally {
            sysRandomColorMapper = null;
            session.close();
        }
    }

}

到了这里,关于No Spring环境Mybatis-Plus批量插入并返回主键的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-Plus的SQL注入器实现批量插入/修改,效率比较

    mysql支持一条sql语句插入多条数据。但是Mybatis-Plus中默认提供的saveBatch、updateBatchById方法并不能算是真正的批量语句,而是遍历实体集合执行INSERT_ONE、UPDATE_BY_ID语句。 mybatis-plus虽然做了分批请求、一次提交的处理。但如果jdbc不启用配置rewriteBatchedStatements,那么批量提交的s

    2024年02月11日
    浏览(49)
  • spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增数据(图文讲解)

     更新时间 2023-01-10 16:02:58 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 实现 MySQL 批量插入数据。 先抛出一个问题:假设老板给你下了个任务,向数据库中添加 100 万条数据,并且不能耗时太久! 通常来说,我们向 MySQL 中新增一条记录,SQL 语句类似如下:

    2024年02月04日
    浏览(46)
  • spring boot集成mybatis-plus——Mybatis Plus 新增数据并返回主键 ID(图文讲解)

     更新时间 2023-01-10 15:37:37 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据,主要内容思维导图如下: Mybatis Plus 新增数据思维导图 为了演示新增数据,在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: 定义一

    2024年02月02日
    浏览(52)
  • spring boot mybatis-plus dynamic-datasource 配置文件 相关依赖环境配置

    spring boot mybatis-plus dynamic-datasource 配置文件 相关依赖环境配置 ##yaml配置 ##父级pom.xml配置 ##子模块pom.xml配置 ##表结构 ##Test.java ##TestMapper.xml ##TestMapper.java ##TestService.java ##TestController ##项目启动类BootStrap.java ##浏览器访问 192.168.3.188:8866/yym/test/v1/test

    2024年02月02日
    浏览(43)
  • Mybatis-plus批量操作

            使用Mybatis-plus可以很方便的实现批量新增和批量修改,不仅比自己写foreach遍历方便很多,而且性能也更加优秀。但是Mybatis-plus官方提供的批量修改和批量新增都是根据id来修改的,有时候我们需求其他字段,所以就需要我们自己修改一下。         在Mybatis-plus的IS

    2024年02月11日
    浏览(39)
  • Mybatis-Plus批量更新原理

    IService的updateBatchById方法 默认batchSize = 1000 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl#updateBatchById 构建了一个回调,进入executeBatch方法 在这个方法基本就能看出来了,执行1000次方法后执行一次flushStatements,也就是说理论上是积累了1000个更新sql,才进行一次数据库更新 使用

    2024年02月05日
    浏览(48)
  • mybatis-plus的批量新增insertBatchSomeColumn

    MyBatis-Plus 是基于 MyBatis 进行封装的一套优秀的持久层框架,它提供了丰富的便捷操作方法和强大的代码生成器,大大简化了 MyBatis 的使用。在 MyBatis-Plus 中,我们可以使用 insertBatchSomeColumn 方法来实现批量新增指定字段的操作。 mybatis-plus 的  IService 接口  默认提供   saveBat

    2024年02月01日
    浏览(38)
  • mybatis-plus 根据指定字段 批量 删除/修改

    mybatis-plus 提供了根据id批量更新和修改的方法,这个大家都不陌生 但是当表没有id的时候怎么办) 这个就不说了,就是因为不想手写SQL 所以才有这篇博客 mybatis plus 的 executeBatch 参考 mybatis plus 的updateBatchById 方法. 调用处: 接口 重写方法 实现 这种写法其实批量的效率还是比较慢的

    2024年02月13日
    浏览(39)
  • mybatis-plus批量保存异常及效率优化

    最近基于自己公司内部服务维护,发现其中调度中心近期出现不少错误日志,但是该任务却是正常执行,生成的报表数据也是正常的,所以很多天没有发现问题 这就匪夷所思了,    经仔细排查发现,是触发了feign超时hystrix熔断器机制 也就是说子服务出现了执行时间过长的

    2024年01月16日
    浏览(31)
  • Spring Boot学习随笔- 集成MyBatis-Plus,第一个MP程序(环境搭建、@TableName、@TableId、@TableField示例)

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! MyBatis-Plus是一个基于MyBatis的增强工具,旨在简化开发,提高效率。它扩展了MyBatis的功能,提供了许多实用的特性,包括强大的CRUD操作、条件构造器、分页插件、代码生成器等。MyBa

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包