本文简单介绍groovy语言及相关知识。
1. groovy语言与java混合编码
系统使用的groovy语言的层次不高,目的是简化应用的开发,因此只需要了解下面的简单介绍或参照在线教程文档, 只需要了解语法、变量、运算符、循环、字符串、列表、映射等基本的几点即可。最好了解一下“闭包”这个java中没有的概念。
groovy对java 的jdk进行了扩展,详细地址在GDK
请尽量在项目中增加groovy文件而非java文件.
1.1. 在项目中使用groovy
若想在GB外的项目开发中使用groovy和java混合编程,需要在gradle或pom中增加如下代码:
implementation 'org.codehaus.groovy:groovy:3.0.5'
增加/src/main/groovy目录,在此目录下创建groovy文件即可.
1.2. groovy语言特性介绍
groovy语言与java在字节码级兼容,同时对jdk进行了扩展,增加了简化操作的方法。
与java语言冲突的地方
{ } 有特殊含义,需要用[ ] 代替,如数组的初始化 需要从{ } 变为 [ ] Java: int[] intArray = { 1, 2, 3, 4, 5 }; Groovy: int[] intArray = [ 1, 2, 3, 4, 5 ];
基本特性
完全兼容java 语法 不强制 ; 结尾 类型不强制,可用 def 关键词 默认访问getter setter 方法,写法简化 默认访问修饰符就是public 重写了操作符
逻辑表达式
If(!value){} 的逻辑判断广泛 value 满足如下条件,则为真 Null 空字符串 0 空的list列表对象 ?判断符 user?.name?.toLowercase() *通配操作符 a=[1,2,3] a*.toString() [‘1’,’2’,’3’]
简化操作的扩展
String类支持三类字符拼接 '' 单引号,与java的字符串相同 "" 双引号, 支持内置变量 "xxx${val} ,yyy" """ """ 三引号,支持多行变量字符串
Date类增加parse静态方法 Date.parse(inputString,“yyyy-MM-dd"); 增加format方法 dateObj.format(“yyyy-MM-dd");
可简化初始化 List list =[]; 赋值: list << "something"; 等价于 list.add("something");
可简化初始化 Map map=[:];
赋值: map.name="something"; 等价于 map.put("name","something");
数据库sql操作
如果GORM的操作无法满足业务需求,必须执行sql才能完成任务.可使用groovy的数据库操作类进行sql操作. 如下例执行cube 或 rollup操作,注入dataSource实例,进行sql操作
@Autowired
DataSource dataSource;
public void search(){
groovy.sql.Sql sql =new groovy.sql.Sql(dataSource);
sql.eachRow("SELECT Item, Color, SUM(Quantity) AS Sum FROM Inventory GROUP BY Item, Color WITH CUBE"){
println "${it.Item} ${it.Color} ${it.Sum}";
}
}
文件操作
将file1.dat 文件复制为file2.dat
使用 java nio
java.nio.file.Files.copy(java.nio.file.Paths.get("/home/file1.dat"), java.nio.file.Paths.get("/home/file2.dat"));
使用文件流
new File('/home/file2.dat').withDataOutputStream { os->
new File('/home/file1.dat').withDataInputStream { is->
os << is
}
}
使用字节拷贝
new File('/home/file2.dat').bytes = new File('/home/file1.dat').bytes