Groovy语言

1 Groovy介绍

1.1 Groovy介绍

Groovy是一种编程语言,它结合了Java的强大功能和脚本语言的简洁性。它具有动态类型、易读的语法、与Java的紧密集成、脚本编程能力、强大的闭包等特点。

1.2 Groovy SQL介绍

Groovy SQL是 Groovy 编程语言的一部分,用于简化与数据库的交互。它提供了一种更易用的方式来执行 SQL 查询和操作数据库,允许开发者使用 Groovy 的简洁语法进行数据库操作,而无需编写繁琐的JDBC 代码。Groovy SQL 支持动态类型、内置数据库连接池、参数化査询、自动结果集处理和异常处理简化等特性,使数据库操作更加方便和高效。这使得 Groovy SQL成为在 Groovy 项目中处理数据库任务的有力工具。

2 环境准备

  • Java Development Kit (JDK):你需要安装适当版本的JavaJDK,建议使用JDK8或更高版本。Groovy在 Java 平台上运行,因此需要 Java 环境。

  • Groovy 安装:你需要安装 Groovy。你可以通过 SDKMAN 或官方网站下载并安装 Groovy。确保将Groovy 的二进制文件路径添加到系统的环境变量中。

  • 操作系统支持:Groovy 可以在多种操作系统上运行,包括Windows、macOS 和各种 Linux 发行版

  • 内存和处理器要求:要顺利运行 Groovy 环境,系统需要有足够的内存和处理器资源。确保系统满足Groovy 运行的最低硬件要求。

Groovy下载: JFrog

image-20240228235735360

解压:

image-20240228235842651

配置环境变量(同jdk):

image-20240229000206081

注意:安装Groovy需要安装jdk并配置好jdk的环境变量,如果不安装jdk就会出现以下问题

ERROR: No java.exe found at: C:\Program Files\Java\jdk1.8.0_131\bin\java.exe
Please set the JAVA_HOME variable in your environment
to match the location of your Java installation.

查看安装是否成功与安装的版本

image-20240228235352357

3 Groovy基本语法

3.1 变量和数据类型

  • 定义变量时不需要显式声明类型,Groovy 会自动推断。(弱类型)

  • 支持基本数据类型(整数、浮点数、布尔值)、字符串和列表等数据类型。

def name = "Alice"
def name = """Alice""”
def age = 30

3.2 控制流

  • 支持条件语句(if、else if、else)、循环(for、while)

  • 与 Java 类似的控制流语法。

使用if判断:

if(age < 18){
	println("未成年")
} else {
    println("成年")
}

使用for循环:

//使用 for 循环遍历一个整数范围
for(int i in 1..5){
    println("iteration: $i")
}
   	 
// 使用 for 循环遍历列表
def colors =['red','green', 'blue']
for(color in colors){
    println("color: $color")
}

// 使用 for 循环遍历列表
def persons =[name:'Alice', age: 30]
for(person in persons){
	println("key: $person.key")
    println("value: $person.value")
}

使用while循环:

def count = 0
while(count < 5){
	println("Count: $count")
    count++
}
//使用 do-while 循环
count =0
do {
	println("Count: $count")
	count++
} while(count<5)

3.3 字符串处理

  • 使用双引号定义字符串,支持字符串插值
  • 使用GString可以在字符串中嵌入变量
def name = "Alice"
def greeting = "Hello, $name!"
//输出 Hello,Alice!

3.4 列表和映射

  • 支持列表(List)和映射(Map)的定义和操作
def colors = ['red','green','blue']
def person = [name: 'Alice',age: 30]

3.5 方法和闭包

  • 定义方法时使用 def 关键字,

  • 支持闭包,可以将函数赋值给变量或作为参数传递。

def greet(name){
	return "Hello, $name!"
}    
def add = { a, b ->a+ b }
// 调用
greet(‘小明’);
add(13);

3.6 类和对象

  • 创建类时使用class关键字
  • 使用new关键字创建对象
  • Groovy支持属性(不需要显式的getter和setter方法)
class Person {
	def name
	def age
}    
def person = new Person(name: "Alice", age: 30)
// 获取属性
println person.name;
println person.age;

3.7 异常处理

  • 使用 try-catch 块捕获异常。
  • 异常处理与 Java 类似。
try {
	//可能会抛出异常的代码
} catch(Exception e){
	// 异常处理代码
}

3.8 导入库

  • 使用import关键字导入其他类或库
import java.util.ArrayList;

3.9 JSON处理

  • 使用JsonBuilder和JsonSlurper
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

def data = ["res_code": "2999","res_desc": "fail!"];

// JSON字符串
def str = new JsonBuilder(data).tostring();
println str;

// JSON对象
def json = new JsonSlurper().parseText(str);
println json;

4 Groovy SQL调用方式

Groovy SQL 提供了一种简洁而强大的方式来执行 SQL 查询和与数据库交互。以下是 Groovy SQL 的基本语法和用法:

4.1 导入库

首先,需要导入Groovy SQL相关的库,通常使用groovy.sql.Sql;

import groovy.sql.Sql

4.2 创建数据库连接

使用Sql类创建数据库连接,并指定数据库的连接信息:

@Grab(group='org.codehaus.groovy.modules', module='groovy-sql', version='3.41.0')

import groovy.sql.Sql

def url = 'jdbc:mysql://localhost:3306/mydatabase'
def user = 'your_username'
def password = 'your_password'
//使用Sql类创建数据库连接,并指定数据库的连接信息:
def db = Sql.newInstance(url, user, password, 'com.mysql.cj.jdbc.Driver')

db.eachRow('SELECT * FROM my_table') { row ->
    println "Column 1: ${row.column1}, Column 2: ${row.column2}"
}

db.close()

4.3 执行查询

使用eachRow、firstRow或rows方法执行查询,处理查询结果:

//定义变量,变量值为执行的sq1
def selectSql ="SELECT * FROM My_Table";
//获取这么定义,区别:使用三个引号定义的变量是可以换行的
def selectSql="""SELECT * 
FROM My_Table""";

// 类似存储过程中的for-loop,cc代表查询的每一行
db.eachRow(selectsql,{
	CC ->
	// 输出cc的内容
	println cc;
});
// 返回第一行,默认加了rownum =1
def result=db.firstRow(selectsql);
// 返回查询结果为一个集合
def list = db.rows(selectsql);

4.4 参数化查询

可以进行参数化查询,防止SQL注入:

//定义变量,变量值为执行的sq1
def selecSql = "SELECT * FROM My_Table WHERE NAME = ? AND AGE = ?",
//类似存储过程中的for-1oop,cc代表查询的每一行
db.eachRow(selectsql,["小明","12"]{
CC ->
// 输出cc的内容
println cc;
});
//返回第一行,默认加了rownum=1
def result = db.firstRow(selectSql,["小白","15"]);
//返回查询结果为一个集合
def list = db.rows(selectSql,["小陈","12"]);

4.5 插入数据

执行插入数据的操作:

//定义变量,变量值为执行的sq1
def insertSql = "INSERT INTO My_Table (ID,NAME,AGE) VALUES (?,?,?);"
// 插入数据
db.executeInsert(insertSql,[1,"小白",12]);
/ 或者
db.execute(insertSql,[1,"小白",12]);

4.6 更新数据

执行更新数据的操作:

//定义变量,变量值为执行的sq1
def updateSql = "UPDATE My_Table T SET T.ID = '1’ WHERE T.NAME = ? AND T.AGE = ?"
// 更新数据
tbcsa.executeUpdate(updateSql,["小白","11"]);
// 或者
tbcsa.execute(updateSql,["小李","13"]);

4.7 删除数据

//定义变量,变量值为执行的sq1
def deleteSql = "DELETE FROM My_Table T WHERE T.ID = ? AND T.NAME = ?",
// 删除数据
db.executeUpdate(deleteSql,["1","小白"]);
//或者
db.execute(deleteSql,["1","小李"]);

4.8 调用存储过程

在Groovy中调用存储过程可以通过Sql库实现。下面是一个简单的示例代码,演示如何连接到数据库并调用存储过程:

groovyCopy Code@Grab(group='org.codehaus.groovy.modules', module='groovy-sql', version='3.41.0')

import groovy.sql.Sql

def url = 'jdbc:mysql://localhost:3306/mydatabase'
def user = 'your_username'
def password = 'your_password'

def sql = Sql.newInstance(url, user, password, 'com.mysql.cj.jdbc.Driver')

def callStoredProcedure = "{call my_stored_procedure(?,?)}"
def params = [param1Value, param2Value] // 传递给存储过程的参数值

sql.withTransaction {
    sql.call(callStoredProcedure, params) { result ->
        result.each { row ->
            println row
        }
    }
}

sql.close()

在上面的代码中:

  • 替换 jdbc:mysql://localhost:3306/mydatabaseyour_usernameyour_password 为你的数据库连接信息。
  • com.mysql.cj.jdbc.Driver 是 MySQL 数据库的驱动程序,如果你使用其他数据库,需要替换为相应的驱动程序类名。
  • my_stored_procedure 是你要调用的存储过程名称,可以根据实际情况进行修改。
  • param1Valueparam2Value 是传递给存储过程的参数值,根据存储过程定义进行设置。
  • withTransaction 方法用于确保在执行存储过程时开启事务,并在代码块执行完毕后自动提交事务或回滚。

4.9 批处理

在Groovy中,你可以使用Sql库来执行批处理SQL语句。下面是一个简单的示例代码,演示如何通过Groovy的Sql库执行批处理:

groovyCopy Code@Grab(group='org.codehaus.groovy.modules', module='groovy-sql', version='3.41.0')

import groovy.sql.Sql

def url = 'jdbc:mysql://localhost:3306/mydatabase'
def user = 'your_username'
def password = 'your_password'

def sql = Sql.newInstance(url, user, password, 'com.mysql.cj.jdbc.Driver')

sql.withBatch { batch ->
    batch.addBatch("INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2')")
    batch.addBatch("UPDATE my_table SET column1 = 'new_value' WHERE column2 = 'some_value'")
    batch.addBatch("DELETE FROM my_table WHERE column1 = 'old_value'")
    
    int[] updateCounts = batch.executeBatch()
    
    println "Updated ${updateCounts.sum()} rows"
}

sql.close()

在上面的代码中:

  • 替换 jdbc:mysql://localhost:3306/mydatabaseyour_usernameyour_password 为你的数据库连接信息。
  • com.mysql.cj.jdbc.Driver 是 MySQL 数据库的驱动程序,如果你使用其他数据库,需要替换为相应的驱动程序类名。
  • withBatch 闭包中,你可以使用 addBatch 方法来添加要执行的SQL语句。
  • executeBatch 方法用于执行批处理中的所有SQL语句,并返回更新计数数组。

4.10 事务提交

db.commit();

4.11 关闭连接

db.close();

5 执行命令

  • 执行
groovy test.groovy
  • 执行带参数
groovy test.groovy param1 param2
  • 指定编码
groovy --encoding=GBK test.groovy
//或
groovy -Dfile.encoding=GBK test.groovy
  • 指定堆内存大小
export JAVA_0PTS="-Xms256m -Xmx1024m
groovy test.groovy
  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值