Groovy语言

news2024/9/28 21:22:32

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1516742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows,MacOS,Linux下载python并配置环境图文讲解

Windows 打开python官网 点击download 点击黄色按钮 另存为 打开文件 全选 配置安装路径 安装中 关闭路径长度限制 完成 验证 同时按住winr(win就是空格键左边的东西) 输入cmd 键入python,如果出现版本(红框)即安装成功 MacOS 同理打开python官网 点击最新版本 拖…

LeetCode - 和可被K整除的子数组

974. 和可被 K 整除的子数组 题目描述&#xff1a;一个连续的区间可以被k整除。 一个连续的区间可以被k整除&#xff0c;如果用前缀和就是(arr[r] - arr[l - 1]) / k 0;当然&#xff0c;在计算机语言里面&#xff0c;用除法判断结果是否为0不行&#xff0c;需要用%,(arr[r] -…

使用Make Sense为YOLOv5-5.0制作自定义数据集及应用

详细可参考官方文档&#xff1a; ​​​​​​​培训自定义数据 -Ultralytics YOLOv8 文档 0.使用Make Sense标注数据集 我们在网页上随机下载五张图片用以演示如何使用Make Sense工具进行标注。下载图片存放在指定文件夹中&#xff0c;如下图所示。 Make Sense网页链接&…

【自监督学习算法】

【自监督学习算法】 什么是自监督学习 (SSL) 算法? 自监督学习 (SSL)是一种不断发展的机器学习技术,旨在解决过度依赖标记数据带来的挑战。多年来,使用机器学习方法构建智能系统在很大程度上依赖于高质量的标记数据。因此,高质量注释数据的成本是整个训练过程中的主要…

【Flutter 面试题】await for 如何使用?

【Flutter 面试题】await for 如何使用&#xff1f; 文章目录 写在前面解答补充说明完整代码示例运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#xff0c;51…

01 数据结构引入 和 顺序表

阅读引言&#xff1a; 从本文开始给大家带来我在复习过程中写的数据结构的代码&#xff0c; 分享给需要的同学 一、数据结构引入 1.数据结构解决什么问题 数据结构可以将杂乱无章的数据管理起来&#xff0c; 提高数据的访问效率 计算机处理的对象&#xff08;数据&#xff09…

Jsp在Javaweb中扮演什么角色?

1.什么是Jsp JSP&#xff08;Java Server Pages&#xff0c;Java 服务器页面&#xff09;是一种动态网页技术&#xff0c;它允许在 HTML 页面中嵌入 Java 代码&#xff0c;并由 Web 服务器在请求页面时动态生成 HTML 页面。JSP 通常用于创建动态 Web 内容&#xff0c;如交互式表…

幻兽帕鲁服务器搭建运行遇到的问题详解

幻兽帕鲁服务器搭建运行遇到的问题详解 大家好我是艾西&#xff0c;在个人玩家搭建幻兽帕鲁时会遇到些小问题。今天艾西给把这些问题全部罗列出来并给到解决方案&#xff0c;需要的小伙伴可以通过本篇文章进行详细的解读。 服务器搭建无法进入/服务器搭建失败&#xff1a;这个出…

Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言&#xff0c;不仅可以减少常见代码错误&#xff0c;还可以轻松集成到现有应用中。如果您想构建 Android 应用&#xff0c;建议您从 Kotlin 开始着手&#x…

ComfyUI中如何自动获取当前日期

之前也介绍过&#xff0c;生成的文件夹是可以直接获取当前的日期&#xff0c;作为文件名进行保存的。但是如果你想获得当前的日期&#xff0c;然后写入到图片上的话&#xff0c;这个需求可能比较小众&#xff0c;查了半天资料&#xff0c;找到一个节点刚好能适配这个需求&#…

软件设计师16--段页式存储

软件设计师16--段页式存储 考点1&#xff1a;页式存储存储管理 - 页式存储组织存储管理 - 页面置换算法例题&#xff1a; 考点2&#xff1a;段式存储存储管理 - 段式存储组织例题&#xff1a; 考点1&#xff1a;页式存储 存储管理 - 页式存储组织 页式存储&#xff1a;将程序…

一体机电脑辐射超标整改

电脑一体机是目前台式机和笔记本电脑之间的一个新型的市场产物&#xff0c;它将主机部分、显示器部分整合到一起的新形态电脑&#xff0c;该产品的创新在于内部元件的高度集成。随着无线技术的发展&#xff0c;电脑一体机的键盘、鼠标与显示器可实现无线链接&#xff0c;机器只…

阿里云最新优惠券领取入口及使用指南

随着云计算技术的普及与服务升级&#xff0c;阿里云作为全球领先的云服务提供商&#xff0c;不断推出各类优惠活动以降低企业和个人用户上云成本。本文将详细介绍阿里云最新优惠券的领取入口以及如何有效地使用优惠券。 一、阿里云优惠券领取入口 阿里云优惠券一般可以通过阿里…

Nodejs 第五十四章(net)

net模块是Node.js的核心模块之一&#xff0c;它提供了用于创建基于网络的应用程序的API。net模块主要用于创建TCP服务器和TCP客户端&#xff0c;以及处理网络通信。 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;用于…

【DataWhale学习】用免费GPU线上跑chatGLM项目实践

用免费GPU线上跑chatGLM项目实践 ​ DataWhale组织了一个线上白嫖GPU跑chatGLM与SD的项目活动&#xff0c;我很感兴趣就参加啦。之前就对chatGLM有所耳闻&#xff0c;是去年清华联合发布的开源大语言模型&#xff0c;可以用来打造个人知识库什么的&#xff0c;一直没有尝试。而…

【开源】SpringBoot框架开发公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?

作为单片机项目开发的卖课佬&#xff0c;个人建议&#xff0c;先转嵌入式单片机开发方向&#xff0c;哈哈。 java我也学过&#xff0c;还学过oracle、mysql数据库&#xff0c;只是当时没做笔记&#xff0c;找不好充分的装逼证据了。 从实习通过业余时间&#xff0c;学到快正式毕…

牛客-DP38 【模板】二维差分

【模板】二维差分_牛客题霸_牛客网 (nowcoder.com) b站有视频&#xff1a;讲解前缀和和差分 二维差分_哔哩哔哩_bilibili 注意&#xff1a;差分的过程叫差分&#xff0c;而不仅仅是d[]这个数组&#xff0c;其他数组经行了差分的操作&#xff0c;就也是差分啊&#xff01;&…

力扣热题100_矩阵_73_矩阵置零

文章目录 题目链接解题思路解题代码 题目链接 73.矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…

安卓上架华为踩坑合集

1.如果是离线打包&#xff0c;注意在manifest那里修改&#xff1a; android:debuggablefalse2…您的应用targetsdk版本低于30&#xff0c;不符合华为应用市场审核标准。 修改建议&#xff1a;请您将应用targetsdk等级升级到30或30以上。 因为之前我升到30被打回来过&#xff…