您当前的位置: 首页 >  sql

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

mybatis执行sql脚本

ITKEY_ 发布时间:2022-04-05 18:14:25 ,浏览量:0

最近在学习若依这个开源项目: https://gitee.com/y_project/RuoYi-Vue

默认的代码生成模块用起来总感觉别扭,比如说,每次生成的代码还要单独的手动执行一下SQL语句。我就在想能不能代码生成的时候就自己帮我执行好了。这样能省个10几秒时间。

由于若依这个框架默认的数据库操作组件是mybatis,所以本文就来研究一下如何通过mybatis来执行sql脚本。

Service

我修改的如下代码: RuoYi-Vue/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java

核心代码如下:

package com.ruoyi.generator.service;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;

/**
 * 业务 服务层实现
 *
 * @author ruoyi
 */
@Service
public class GenTableServiceImpl implements IGenTableService
{
    private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class);

    @Autowired
    private DataSource dataSource;

    /**
     * 使用ScriptRunner执行SQL脚本
     * @param  filePaths 是文件的绝对路径数组,格式如下:
     * String[] filePaths = {"/xxx/sql/update1.sql", "/xxx/sql/update2.sql"};
     */
    public void doExecuteSql(String[] filePaths) {
        //通过数据源获取数据库链接
        Connection connection = DataSourceUtils.getConnection(dataSource);
        //创建脚本执行器
        ScriptRunner scriptRunner = new ScriptRunner(connection);
        //创建字符输出流,用于记录SQL执行日志
        StringWriter writer = new StringWriter();
        PrintWriter print = new PrintWriter(writer);
        //设置执行器日志输出
        scriptRunner.setLogWriter(print);
        //设置执行器错误日志输出
        scriptRunner.setErrorLogWriter(print);
        //设置读取文件格式
        Resources.setCharset(StandardCharsets.UTF_8);

        for (String path : filePaths) {
            Reader reader = null;
            try {
                File file = new File(path);
                //获取资源文件的字符输入流
                if(file.exists()) {
                    reader = new FileReader(file);
                }
            } catch (IOException e) {
                //文件流获取失败,关闭链接
                log.error(e.getMessage(), e);
                scriptRunner.closeConnection();
                return;
            }
            //执行SQL脚本
            scriptRunner.runScript(reader);
            //关闭文件输入流
            try {
                reader.close();
            } catch (IOException e) {
                log.error(e.getMessage(), e);
            }
        }
        //输出SQL执行日志
        log.debug(writer.toString());
        //关闭输入流
        scriptRunner.closeConnection();
    }
}

参考

《spring+mybatis执行SQL脚本文件》 https://blog.csdn.net/Michean/article/details/112651793

关注
打赏
1665243900
查看更多评论
立即登录/注册

微信扫码登录

0.0406s