欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot引入druid解析sql的過程

 更新時間:2023年08月22日 15:15:46   作者:夜空下的星  
在開發(fā)中,有時我們可能會需要獲取SQL中的表名,那么因為不同的數(shù)據(jù)源類型SQL會存在部分差異,那么我們就可以使用alibaba 的druid包實現(xiàn)不同的數(shù)據(jù)源類型的sql解析,需要的朋友可以參考下

一、前言

在開發(fā)中,有時我們可能會需要獲取SQL中的表名,那么因為不同的數(shù)據(jù)源類型SQL會存在部分差異,那么我們就可以使用alibaba 的druid包實現(xiàn)不同的數(shù)據(jù)源類型的sql解析。

二、引入相關(guān)maven依賴

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>

三、通過工具類SqlUtils實現(xiàn)對SQL的解析。

public class QualitySqlUtils {
	  /**
     *  根據(jù)sql及數(shù)據(jù)源類型獲取表名
     */
	 public static List<String> getSelectSqlTable(String sql, String dbType) {
        List<String> tableList = new ArrayList<>();
        List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
        SchemaStatVisitor visitor;
        for (SQLStatement sqlStatement : stmtList) {
            if (DbType.mysql.name().equalsIgnoreCase(dbType)) {
                visitor = new MySqlSchemaStatVisitor();
            } else if (DbType.hive.name().equalsIgnoreCase(dbType)) {
                visitor = new HiveSchemaStatVisitor();
            } else if (DbType.postgresql.name().equalsIgnoreCase(dbType)) {
                visitor = new PGSchemaStatVisitor();
            } else if (DbType.oracle.name().equalsIgnoreCase(dbType)) {
                visitor = new OracleSchemaStatVisitor();
            } else {
                visitor = new SchemaStatVisitor(DbType.of(dbType));
            }
            sqlStatement.accept(visitor);
            Map<TableStat.Name, TableStat> tables = visitor.getTables();
            for (Map.Entry<TableStat.Name, TableStat> entry: tables.entrySet()){
                String value = entry.getValue().toString();
                if (StringUtils.isNotBlank(value)) {
                    tableList.add(entry.getKey().getName());
                }
            }
        }
        return tableList;
    }
    /**
    * 根據(jù)sql獲取查詢的字段
    */
    public static Map<String, String> getSelectSqlColumn(String sql, String dbType) {
        Map<String, String> columnMap = new HashMap<>();
        List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
        for (int i = 0; i < stmtList.size(); i++) {
            SQLStatement stmt = stmtList.get(i);
            if (stmt instanceof SQLSelectStatement) {
                SQLSelectStatement sqlSelectStatement = (SQLSelectStatement) stmt;
                SQLSelect select = sqlSelectStatement.getSelect();
                SQLSelectQueryBlock query = (SQLSelectQueryBlock) select.getQuery();
                List<SQLSelectItem> selectList = query.getSelectList();
                selectList.forEach(item->{
                    columnMap.put(item.getExpr().toString(), item.getAlias());
                });
            }
        }
        return columnMap;
    }
}

三、測試結(jié)果

public class testDemo{
    public static void main(String[] args) {
        String sql = "select t.* from table1 as t left join table2 t2 on t.id = t2.id";
        List<String> tableList =getSelectSqlTable(sql, "mysql");
        System.out.println("獲取到的表名: "+tableList);
    }
}

運行結(jié)果如下:

到此這篇關(guān)于springboot引入druid解析sql的文章就介紹到這了,更多相關(guān)springboot引入druid內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Spring?Boot設(shè)置上傳文件大小限制

    如何使用Spring?Boot設(shè)置上傳文件大小限制

    上傳文件是互聯(lián)網(wǎng)中常應(yīng)用的場景之一,最典型的情況就是上傳頭像等,下面這篇文章主要給大家介紹了關(guān)于如何使用Spring?Boot設(shè)置上傳文件大小限制的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java中的system.getProperty()的作用及使用方法

    Java中的system.getProperty()的作用及使用方法

    System.getProperty()?方法用于獲取系統(tǒng)屬性的值,該方法接受一個字符串參數(shù),表示要獲取的系統(tǒng)屬性的名稱,返回值為字符串類型,表示該屬性的值,接下來通過本文給大家介紹Java中的system.getProperty()的作用及使用方法,感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • Java版超大整數(shù)階乘算法代碼詳解-10,0000級

    Java版超大整數(shù)階乘算法代碼詳解-10,0000級

    這篇文章主要介紹了Java版超大整數(shù)階乘算法代碼詳解-10,0000級,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • java理論基礎(chǔ)Stream?reduce實現(xiàn)集合元素歸約

    java理論基礎(chǔ)Stream?reduce實現(xiàn)集合元素歸約

    這篇文章主要為大家介紹了java理論基礎(chǔ)Stream?reduce實現(xiàn)集合元素歸約示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • SpringBoot項目啟動后立馬自動關(guān)閉的解決方案

    SpringBoot項目啟動后立馬自動關(guān)閉的解決方案

    這篇文章主要介紹了SpringBoot項目啟動后立馬自動關(guān)閉的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java實現(xiàn)輕輕松松控制臺斗地主的示例代碼

    java實現(xiàn)輕輕松松控制臺斗地主的示例代碼

    這篇文章主要介紹了java實現(xiàn)輕輕松松控制臺斗地主,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • springboot?vue接口測試前后端實現(xiàn)模塊樹列表功能

    springboot?vue接口測試前后端實現(xiàn)模塊樹列表功能

    這篇文章主要為大家介紹了springboot?vue接口測試前后端實現(xiàn)模塊樹列表功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • java實現(xiàn)讀取jar包中配置文件的幾種方式

    java實現(xiàn)讀取jar包中配置文件的幾種方式

    本文主要介紹了java實現(xiàn)讀取jar包中配置文件的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • java課程設(shè)計之坦克大戰(zhàn)

    java課程設(shè)計之坦克大戰(zhàn)

    這篇文章主要為大家詳細介紹了java課程設(shè)計之坦克大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java如何把逗號分隔的String字符串轉(zhuǎn)int集合

    java如何把逗號分隔的String字符串轉(zhuǎn)int集合

    這篇文章主要介紹了java實現(xiàn)把逗號分隔的String字符串轉(zhuǎn)int集合,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論