Spring Boot 中批量执行 SQL 脚本的实践

这篇具有很好参考价值的文章主要介绍了Spring Boot 中批量执行 SQL 脚本的实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Spring Boot应用中,有时候我们需要批量执行存储在数据库中的 SQL 脚本。本文将介绍一个实际的案例,演示如何通过 Spring Boot、MyBatis 和数据库来实现这一目标。

0、数据库层

CREATE TABLE batchUpdate (

    id INT AUTO_INCREMENT PRIMARY KEY,
    update_type VARCHAR(255) NOT NULL,
    success_flag BOOLEAN NOT NULL,
    failure_count INT NOT NULL,
    execution_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    sql_script TEXT NOT NULL
);

  


-- 第一条数据

INSERT INTO `batch_update` (`update_type`, `success_flag`, `failure_count`, `update_count`, `sql_script`)

VALUES

('update_type_1', 0, 0, 0,

'UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_1'';

UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_1'';

UPDATE batch_update SET failure_count = failure_count + 1, update_count = update_count + 1 WHERE update_type = ''update_type_1'';');

  


-- 第二条数据

INSERT INTO `batch_update` (`update_type`, `success_flag`, `failure_count`, `update_count`, `sql_script`)

VALUES

('update_type_2', 0, 0, 0,

'UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_2'';

UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_2'';

UPDATE batch_update SET failure_count = failure_count + 1, update_count = update_count + 1 WHERE update_type = ''update_type_2'';');

  


-- 第三条数据

INSERT INTO `batch_update` (`update_type`, `success_flag`, `failure_count`, `update_count`, `sql_script`)

VALUES

('update_type_1', 0, 0, 0,

'UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_1'';

UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_1'';

UPDATE batch_update SET failure_count = failure_count + 1, update_count = update_count + 1 WHERE update_type = ''update_type_1'';');

  


-- 第四条数据

INSERT INTO `batch_update` (`update_type`, `success_flag`, `failure_count`, `update_count`, `sql_script`)

VALUES

('update_type_2', 0, 0, 0,

'UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_2'';

UPDATE batch_update SET success_flag = 1, update_count = update_count + 1 WHERE update_type = ''update_type_2'';

UPDATE batch_update SET failure_count = failure_count + 1, update_count = update_count + 1 WHERE update_type = ''update_type_2'';');

1. 控制器层(Controller)

@RestController
@RequestMapping("/batchUpdate")
@AllArgsConstructor
public class BatchUpdateController {

    private BatchUpdateService batchUpdateService;

    @PostMapping("/executeScript/{updateType}")
    public String executeScript(@PathVariable String updateType) {
        List<BatchUpdateEntity> batchUpdateEntities = batchUpdateService.findByUpdateType(updateType);

        if (batchUpdateEntities.isEmpty()) {
            return "Update type not found.";
        }

        for (BatchUpdateEntity batchUpdateEntity : batchUpdateEntities) {
            batchUpdateService.executeSqlScriptBatch(batchUpdateEntity);
        }

        return "SQL scripts executed successfully.";
    }
}

2. 服务层(Service)

javaCopy code
@Service
@AllArgsConstructor
public class BatchUpdateService {

    private BatchUpdateMapper batchUpdateMapper;

    public List<BatchUpdateEntity> findByUpdateType(String updateType) {
        return batchUpdateMapper.findByUpdateType(updateType);
    }

    public void executeSqlScriptBatch(BatchUpdateEntity batchUpdateEntity) {
        String sqlScript = batchUpdateEntity.getSqlScript();
        List<String> sqlScripts = Arrays.stream(sqlScript.split(";"))
                .map(String::trim)
                .filter(s -> !s.isEmpty())
                .toList();
        System.out.println(sqlScripts.size());
        sqlScripts.forEach(sql -> {
            System.out.println("要执行的sql:" + sql);
            batchUpdateMapper.executeSqlScript(sql);
            System.out.println("已执行的sql:" + sql);
        });
    }
}

3. 数据访问层(Mapper)

@Mapper
public interface BatchUpdateMapper {

    List<BatchUpdateEntity> findByUpdateType(@Param("updateType") String updateType);
    void executeSqlScript(@Param("sql") String sql);
}

4. MyBatis 配置文件(BatchUpdateMapper.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="com.lfsun.sqlscript.BatchUpdateMapper">

    <resultMap id="BatchUpdateEntityResultMap" type="com.lfsun.sqlscript.BatchUpdateEntity">
        <id property="id" column="id" />
        <result property="updateType" column="update_type" />
        <result property="successFlag" column="success_flag" />
        <result property="failureCount" column="failure_count" />
        <result property="executionTime" column="execution_time" />
        <result property="sqlScript" column="sql_script" />
    </resultMap>

    <select id="findByUpdateType" resultMap="BatchUpdateEntityResultMap">
        SELECT * FROM batch_update WHERE update_type = #{updateType}
    </select>
    <update id="executeSqlScript">
        ${sql}
    </update>
</mapper>

Spring Boot 中批量执行 SQL 脚本的实践,# Java 框架,# RDBMS,spring boot,sql

Spring Boot 中批量执行 SQL 脚本的实践,# Java 框架,# RDBMS,spring boot,sql

通过这个案例,可以学到如何在 Spring Boot 中通过 MyBatis 实现批量执行 SQL 脚本的功能。在控制器层中,我们通过 @PostMapping 注解定义了一个接口,接收 updateType 作为路径参数,然后调用服务层的方法。服务层中,我们通过 MyBatis 执行 SQL 脚本,实现了对数据库的批量操作。文章来源地址https://www.toymoban.com/news/detail-795766.html

到了这里,关于Spring Boot 中批量执行 SQL 脚本的实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java Spring Boot 开发框架

    Spring Boot是一种基于Java编程语言的开发框架,它的目标是简化Java应用程序的开发过程。Spring Boot提供了一种快速、易于使用的方式来创建独立的、生产级别的Java应用程序。本文将介绍Spring Boot的特性、优势以及如何使用它来开发高效、可靠的应用程序。 Spring Boot是由Pivotal团队

    2024年02月08日
    浏览(46)
  • 初级 - 若依框架 - Java Spring/Spring Boot 项目理解记录

    一般情况下,我们创建对象都是 类名 + 类引用名 = new 类名() 但是如果是不想要 等于号后面的对象实例化操作,那么可以使用 @Autowired 注解,当然这是在使用 Spring 时,才能这样,不然一般情况下,也没法用这个注解。用了这个 @Autowired 注解,会让 Spring 自动帮你托管这个对象

    2024年02月16日
    浏览(46)
  • Java 中 Spring Boot 框架下的 Email 开发

    hutool工具包: 这个类更贴近我们的常见信息 ,用这个去构造邮箱框架的指定邮件类的构造。 邮箱格式检查: 以 yeah.net 邮箱为例(其他的邮箱也会有,举一反三) 根据指导即可,获得授权密码! 以smtp为例: 这个就是host,可以查一下,port是465(其他的服务器 port是啥,一查

    2024年04月08日
    浏览(45)
  • shell批量执行命令与文件传输脚本

    对未进行主机信任操作的服务器进行批量操作 由于ssh只能在交互模式中输入服务器密码进行登录登操作,不便于进行大批量服务器进行巡检或日志采集。sshpass恰好又解决了这个问题,使用 ssh -p passwd 可以实现命令行输入密码操作,便于进行规模巡检 首先需要在脚本执行机器

    2024年02月08日
    浏览(41)
  • shell脚本-批量主机执行命令(expect)

    上次连接多台服务器使用ssh-keygen,24机器去连接22、25,所以存在.ssh/authorized_keys 1.如果有.ssh/authorized_keys该文件则先删除 1.expect命令含义 expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互

    2024年02月13日
    浏览(52)
  • Java 框架面试题-Spring Boot自定义配置与自动配置共存

    Spring Boot 是一个快速开发框架,可以简化 Spring 应用程序的开发,其中自定义配置是其中一个非常重要的特性。 在 Spring Boot 中,自定义配置允许开发者以自己的方式来配置应用程序。自定义配置可以用于覆盖默认配置,也可以用于添加新的配置项。本文将详细介绍 java框架面

    2023年04月11日
    浏览(45)
  • 探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty

    🎉欢迎来到Java面试技巧专栏~探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java面试技巧 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习

    2024年02月08日
    浏览(49)
  • 手把手搭建 java spring boot 框架 maven 项目 web 网址访问

    第一步我们去  spring boot 官网创建项目并下载压缩包  创建项目网址: Spring Initializr https://start.spring.io/ 我们添加一个 srping web 的拓展包 接下来我们点击 generate 创建 并下载压缩包即可 接下来我们将压缩文件包解压到项目根目录使用编辑器打开即可,如果编辑器提示 点击构

    2024年04月23日
    浏览(41)
  • mybatis配置批量执行SQL

    foreach 标签插入数据量大时,明显影响效率,个人倾向以下配置  applicationcontext 配置文件 Java代码 mybatis文件没什么可说的,就是普通单条插入的insert 标签即可

    2024年02月12日
    浏览(37)
  • DBeaver SQL脚本执行配置

    对生产环境数据迁移到测试环境时,单条执行可能时间过长、或者内存装不下。最快的方法是执行SQL脚本。 本地数据库客户端:DBeaver 该客户端是不自带脚本执行客户端的,如下图: mysql官网下载workbench,可以连通客户端执行组件一起下载下来:MySQL :: Download MySQL Workbench 之后

    2024年01月17日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包