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

chatgpt/2023/9/26 15:08:37


批量插入,可以把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;@Overridepublic 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;@Beforepublic void init() {sysRandomColorProviderInstance = BeanInstanceFactoryHandler.getBeanInstance(SysRandomColorProvider.class);} @Testpublic 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);}}}@Testpublic 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;@Overridepublic 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*/@Overridepublic 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;}
@Overridepublic 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();}}}

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化测试之流程控制语句讲解

一、前言 这篇文章呢我们接着来讲python自动化的基础&#xff0c;本篇文章主要讲解Python中的几种流程控制语句用法、使用场景、注意事项等&#xff0c;是流程控制语句的专题讲解&#xff0c;废话这里就不多说了咱们直接进入主题吧。 二、流程控制语句 2.1 if else流程控制语句…

测试libcurl库的demo时,报错 curl_easy_perform() failed: SSL connect error

系统&#xff1a;麒麟V10 arm roothg-TR3250:/home/cur765/curl-7.65.3/docs/examples# cat /etc/os-release NAME"Kylin" VERSION"银河麒麟桌面操作系统(国防版)V10" VERSION_US"Kylin Linux Desktop (GFB)V10" IDkylin ID_LIKEdebian PRETT…

pinia 状态管理器详细文档记录,如何使用pinia看着一篇就够了!!!

目录 安装Pinia 定义store 1.option对象写法&#xff1a; 2.Setup 函数写法 使用store 接下来细化一下pinia的三大核心概念 state、action、getter 一、state 访问 state 重置 state 变更 state 替换 state 订阅 state 二、Getter 访问其他 getter 向 getter 传递…

【Linux进程篇】进程概念(1)

【Linux进程篇】进程概念&#xff08;1&#xff09; 目录 【Linux进程篇】进程概念&#xff08;1&#xff09;进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类 组织进程查看进程通过系统调用获取进程标示符通过系统调用创建进程——fork初识 作者&#xff…

RK3588平台开发系列讲解(调试篇)如何进行性能分析

文章目录 一、什么是性能分析呢?二、系统级工具三、源码级工具沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍性能分析(Performance Profiling) 最简单的性能分析工具是 top,可以快速查看进程的 CPU、内存使用情况;pstack 和 strace 能够显示进程在用…

LeetCode每日一题Day1——买卖股票的最佳时机

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; ✨…

实用人工智能 2.0,在线“学习、探索和构建”ML 模型

人工智能爱好者过去需要在一个好的GPU上投资数千美元才能“动手”进行机器学习&#xff0c;但现在一个简单的网络浏览器就足够了。总部位于硅谷的非营利组织PracticalAI最近发布了“PracticalAI2.0”&#xff0c;该平台包括TensorFlow 2.0Keras中的说明性机器学习课程&#xff…

CPU Architecture Methodologies

MMU MMU(Memory Management Unit) 负责将逻辑地址转化为物理地址对于现代处理器来说&#xff0c;一般每个core都有自己的 MMU页表等数据结构保存在 TLB NUMA Non-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access…
推荐文章