我是靠谱客的博主 欣喜萝莉,最近开发中收集的这篇文章主要介绍SpringBoot项目Java中集成Groovy敏捷开发语言,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

业务背景

通过页面写入SQL, 再通过固定的接口查询, 实现快速开发。因为SQL中需要涉及参数判断来拼接SQL语句,所有此处引入Groovy来实现判断条件的处理。

例如下面的SQL

通过三元表达式判断拼接, 传入了parent_id则只查询它下面的数据

1. 引入依赖

https://github.com/groovy/GMavenPlus/wiki/Examples

<dependency>
    <artifactId>groovy-all</artifactId>
    <groupId>org.codehaus.groovy</groupId>
    <version>3.0.9</version>
    <type>pom</type>
</dependency>

2. 创建Groovy文件

3. 代码

具体的语法请移步 Groovy的基本语法_会飞的哈士奇的博客-CSDN博客

package cn.com.baidu.groovy

import javax.script.Bindings
import javax.script.Invocable
import javax.script.ScriptEngine
import javax.script.ScriptEngineManager

/**
 * Groovy动态条件拼接SQL
 */
class SQLGroovy {

    // 查找并创建指定脚本引擎
    private ScriptEngine engine = new ScriptEngineManager().getEngineByName("groovy");

    String executeFunction(Map<String, Object> params, String querySql){
        // 初始化Bindings
        Bindings bindings = engine.createBindings();
        if(params != null) {
            for(Map.Entry<String, Object> map : params.entrySet()) {
                // 绑定参数
                bindings.put(map.getKey(), map.getValue());
                // bindings.setVariable(map.getKey(), map.getValue());
            }
        }
        // 定义groovy脚本中执行方法的名称
        String scriptName = "executeSQL";
        // 定义groovy脚本内容
        String scriptContent = '''
                    def executeSQL() {
                        def sqlStr = "'''+ querySql + '''";
                        return sqlStr;
                    } 
                ''';
        try {
            // 执行脚本
            engine.eval(scriptContent, bindings);
            // 获取执行结果
            Invocable invocable = (Invocable) engine;
            def result = (String) invocable.invokeFunction(scriptName);
            return result;
        } catch (ScriptException | NoSuchMethodException e) {
            e.printStackTrace();
        }
        return "";
    }

}

4. 编译

如果此时用maven直接编译,在调用.groovy类的地方会编译不通过,提示找不到符号

这是因为maven无法编译.groovy类导致的这个问题,.groovy类需要引入maven插件来进行单独编译。

pom文件中引入插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.6.1</version>
                <configuration>
                    <sourceEncoding>UTF-8</sourceEncoding>
                    <sources>
                        <source><!-- cn/com/baidu/groovy则是.groovy文件的路径,配置以后编译的时候就会找这个路径下的.groovy文件 -->
                            <directory>${project.basedir}/src/main/java/cn/com/baidu/groovy</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                    </sources>
                    <testSources>
                        <testSource>
                            <directory>${project.basedir}/src/main/test/cn/com/baidu/groovy</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </testSource>
                    </testSources>
                    <!-- 用maven编译时需要加encoding:mvn -Dfile.encoding=UTF-8 compile  -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>addSources</goal>
                            <goal>addTestSources</goal>
                            <goal>compile</goal>
                            <goal>compileTests</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

执行插件gmaven编译groovy文件

最后

以上就是欣喜萝莉为你收集整理的SpringBoot项目Java中集成Groovy敏捷开发语言的全部内容,希望文章能够帮你解决SpringBoot项目Java中集成Groovy敏捷开发语言所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部