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

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: springboot mybatis-plus批量删除可以使用Mybatis-Plus提供的DeleteWrapper进行实现。示例代码如下: ```java List<Integer> ids = Arrays.asList(1, 2, 3); // 待删除的id列表 QueryWrapper<Entity> wrapper = new QueryWrapper<>(); wrapper.in("id", ids); int deleteCount = entityMapper.delete(wrapper); ``` 其中,ids是待删除的id列表,wrapper是一个查询条件封装类,in方法可以构造一个IN查询条件,entityMapper是Mybatis生成的Mapper接口。 在以上代码中,我们首先创建一个id列表,然后创建一个QueryWrapper对象,使用in方法构造一个IN查询条件,查询条件的字段为id,值为ids列表中的值。最后调用entityMapper的delete方法进行批量删除,并返回删除的记录数。 需要注意的是,以上代码中的Entity是待删除实体的实体类,entityMapper是Mybatis生成的Mapper接口。如果你的实体类名不同,需要将Entity替换为你的实体类名,将entityMapper替换为你的Mapper接口名。 ### 回答2: 在Spring Boot中使用MyBatis-Plus进行批量删除,可以按照以下步骤进行操作: 1. 首先,在你的实体类中定义一个符合条件的查询方法,用于获取需要删除的数据列表。可以使用MyBatis-Plus的Wrapper来构建查询条件。 例如,假设我们有一个User实体类,要删除所有年龄大于等于18岁的用户,可以在该实体类中定义一个查询方法: ```java public List<User> findUsersToDelete() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 18); return this.selectList(queryWrapper); } ``` 2. 在你的服务类中,调用该查询方法获取需要删除的数据列表: ```java List<User> usersToDelete = userService.findUsersToDelete(); ``` 3. 使用MyBatis-Plus批量删除方法,将获取到的数据列表作为参数进行批量删除操作: ```java userMapper.deleteBatchIds(usersToDelete.stream().map(User::getId).collect(Collectors.toList())); ``` 这里的deleteBatchIds方法接受一个ID列表作为参数,我们可以使用Stream API将用户列表中的ID取出,并封装为一个ID列表。 整体来说,使用Spring Boot和MyBatis-Plus进行批量删除的步骤如下:先在实体类中定义一个查询方法,获取需要删除的数据列表,然后在服务类中调用该方法获取数据列表,最后使用批量删除方法进行删除操作。 ### 回答3: 在Spring Boot中使用MyBatis-Plus进行批量删除操作可以通过以下步骤完成: 1. 首先,确保已在Spring Boot项目中正确配置了MyBatis-Plus依赖,并已配置好相应的数据源和实体。 2. 创建一个Mapper接口,该接口中定义了批量删除的方法。可以使用MyBatis-Plus提供的`deleteBatchIds`方法来实现批量删除。方法接受一个包含待删除记录主键的List作为参数。 ```java @Repository public interface UserMapper extends BaseMapper<User> { void batchDelete(List<Integer> ids); } ``` 3. 在Mapper接口对应的XML文件中,编写批量删除的SQL语句。使用`<foreach>`标签来循环遍历传入的主键列表,并执行批量删除操作。 ```xml <!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <delete id="batchDelete"> DELETE FROM user WHERE id IN <foreach collection="ids" open="(" separator="," close=")"> #{item} </foreach> </delete> </mapper> ``` 4. 在Service层中注入Mapper接口,并调用对应的方法进行批量删除操作。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void batchDelete(List<Integer> ids) { userMapper.batchDelete(ids); } } ``` 5. 最后,在Controller层中调用Service的方法来处理批量删除的请求。 ```java @RestController public class UserController { @Autowired private UserService userService; @DeleteMapping("/users") public void batchDeleteUsers(@RequestBody List<Integer> ids) { userService.batchDelete(ids); } } ``` 以上就是使用Spring Boot和MyBatis-Plus实现批量删除的步骤。通过将待删除记录的主键以列表形式传入,可以一次性删除多个记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值