通过页面写入SQL, 再通过固定的接口查询, 实现快速开发。因为SQL中需要涉及参数判断来拼接SQL语句,所有此处引入Groovy来实现判断条件的处理。
例如下面的SQL
通过三元表达式判断拼接, 传入了parent_id则只查询它下面的数据
1. 引入依赖https://github.com/groovy/GMavenPlus/wiki/Examples
2. 创建Groovy文件 3. 代码groovy-all org.codehaus.groovy 3.0.9 pom
具体的语法请移步 Groovy的基本语法_会飞的哈士奇的博客-CSDN博客
package cn.com.baidu.groovy
import javax.script.Bindings
import javax.script.Invocable
import javax.script.ScriptEngine
import javax.script.ScriptEngineManager
class SQLGroovy {
// 查找并创建指定脚本引擎
private ScriptEngine engine = new ScriptEngineManager().getEngineByName("groovy");
String executeFunction(Map params, String querySql){
// 初始化Bindings
Bindings bindings = engine.createBindings();
if(params != null) {
for(Map.Entry 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文件中引入插件执行插件gmaven编译groovy文件org.codehaus.gmavenplus gmavenplus-plugin1.6.1 UTF-8 ${project.basedir}/src/main/java/cn/com/baidu/groovy ***.groovy addSources addTestSources compile compileTests



