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


批量插入,可以把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);
    }
}


 服务接口及实现类:



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();
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/53556.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot —程序包org.springframework.boot.test.context不存在

一. 遇到问题 &#xff1a;程序包org.springframework.boot.test.context不存在 发生错误的原因是项目中缺少spring-boot-starter-test依赖导致的&#xff0c;解决方案如下: 在项目根目录的pom.xm文件中的<dependencies>节点下增加以下依赖即可&#xff1a; <depen…

网上办理的三网低月租大流量,到底能不能选归属地?

网上办理的三网低月租大流量&#xff0c;到底能不能选归属地&#xff1f; 首先&#xff0c;小编就明确地告诉大家&#xff0c;如果默认的是归属地随机&#xff0c;那么是不可以选择归属地的。 看到这里&#xff0c;可能有人会有疑问&#xff0c;网上的流量卡也是运营商推出的…

编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)

系列文章目录 编程小白的自学笔记十一&#xff08;python爬虫入门三Selenium的使用实例详解&#xff09; 编程小白的自学笔记十&#xff08;python爬虫入门二实例代码详解&#xff09; 编程小白的自学笔记九&#xff08;python爬虫入门代码详解&#xff09; 目录 系列文章…

【Python】Web学习笔记_flask(1)——getpost

flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 from flask import Flask,url_for,redirect,requestappFlask(__name__)app.route(/) def index():namerequest.args.get(name)agerequest.args.get(age)messagef姓名:{nam…

Electron逆向调试

复杂程序处理方式&#xff1a; 复杂方式通过 调用窗口 添加命令行参数 启动允许调用&#xff0c;就可以实现调试发布环境的electron程序。 断点调试分析程序的走向&#xff0c;程序基本上会有混淆代码处理&#xff0c; 需要调整代码格式&#xff0c;处理程序。

32.选择器

选择器 html部分 <div class"toggle-container"><input type"checkbox" id"good" class"toggle"><label for"good" class"label"><div class"ball"></div></label&…

Spring学习笔记之spring概述

文章目录 Spring介绍Spring8大模块Spring特点 Spring介绍 Spring是一个轻量级的控制反转和面向切面的容器框架 Spring最初的出现是为了解决EJB臃肿的设计&#xff0c;以及难以测试等问题。 Spring为了简化开发而生&#xff0c;让程序员只需关注核心业务的实现&#xff0c;尽…

flutter 导出iOS问题2

问题1:The Swift pod FirebaseCoreInternal depends upon GoogleUtilities, which does not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries) 参考 正如上图报错第三方…

Mybatis中where 1=1 浅析

在一些集成mybatis的工程中经常看到where11 的代码&#xff0c;也有同事问我&#xff0c;这样写有什么用&#xff0c;下面对其进行简单的分析记录一下。 1、场景 看下面这样一段xml中的代码 <select id"queryBook" parameterType"com.platform.entity.Book…

k8s webhook实例,java springboot程序实现 对Pod创建请求添加边车容器 ,模拟istio实现日志文件清理

k8s webhook实例&#xff0c;java springboot程序实现 对Pod创建请求添加边车容器 &#xff0c;模拟istio实现日志文件清理 大纲 背景与原理实现流程开发部署my-docker-demo-sp-user服务模拟业务项目开发部署my-sidecar服务模拟边车程序开发部署服务my-docker-demo-k8s-opera…

Django快速上手

Django简介 Django 框架最初的诞生&#xff0c;主要是用来开发和管理 Lawrence Publishing Group&#xff08;劳伦斯出版集团&#xff09;旗下新闻网站的一款软件&#xff0c;是一款属于 CMS&#xff08;Content Management System&#xff0c;内容管理系统&#xff09;类的软…

面试典中典之线程池的七大参数

文章目录 一、七大元素解释1.corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;2.maximumPoolSize&#xff08;最大线程数&#xff09;&#xff1a;3.keepAliveTime&#xff08;线程空闲时间&#xff09;&#xff1a;4.unit&#xff08;时间单位&#xff09;&#x…

Python 进阶(六):文件读写(I/O)

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 1. 打开文件2. 读取文件2.1 逐行读取文件2.2 读取所有行 3. 写入文件3.1 向文件中写入…

开放麒麟1.0发布一个月后,到底怎么样?另一款操作系统引发热议

具有里程碑意义 7月5日&#xff0c;国产首个开源桌面操作系统“开放麒麟1.0”正式发布。 标志着我国拥有了操作系统组件自主选型、操作系统独立构建的能力&#xff0c;填补了我国在这一领域的空白。 举国欢庆&#xff0c;算的上是里程碑意义了&#xff01; 发布后用着如何&a…

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…

2.获取DOM元素

获取DOM元素就是利用JS选择页面中的标签元素 2.1 根据CSS选择器来获取DOM元素(重点) 2.1.1选择匹配的第一个元素 语法: document.querySelector( css选择器 )参数: 包含一个或多个有效的CSS选择器 字符串 返回值: CSS选择器匹配的第一个元素&#xff0c;一个HTMLElement对象…

分享一个赛车动画

先看效果&#xff08;动画太大了放不上来&#xff0c;甘心去复制代码运行即可&#xff09;&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>赛车</title><…

一些网络知识总结(自用)

一些网络知识总结&#xff08;自用&#xff09; 1. 进制的转换 所有进制转换成十进制就是把字面值*权数 比如16进制 5AEF 转成10机制话就是 1* 151614321064 * 5 2. ip地址网段的概念&#xff0c;可用ip&#xff0c;广播地址 比如一个ip为10.1.1.1/24那么他的网络号就是前…

vue表单筛选

目录 筛选 HTML scss* filterComp 排序 表格 自定义数据样式 inner-table 分页 删除 default-modal 自定义元素的插槽-占位符 .search-wrap {height: 60px;display: flex;align-items: center;overflow: hidden;padding: 0 20px;.selected-options-wrap {flex: 1;.…

绝对定位的遮挡

<ul class"slide-nav leftfix"><li><!-- 一级菜单 --><a href"#">手机/运营商/数码</a><!-- 二级菜单 --><div class"second-menu"></div></li><li><a href"#">电…