Groovy 学习资料:
https://www.bootwiki.com/groovy/index.html
https://pan.baidu.com/s/1CKleLGL_s-VM7r17jJw3mA?pwd=om66
1.为什么Groovy比较帅?
1)Groovy是java平台上的脚本语言,抽象程度更高。
可以更简单快速地开发,可以编写更上的代码。
2)与java语言无缝集成,可称为“超级java”
使用”类java“语法,java程序员可以快速过度
groovy与java二进制兼容,都生成字节码,所以可以与使用java语言所编写的框架和组件完美集成,并且效率安全方面比其他脚本语言要高
groovy对象就是java对象,使用与jdk相同的API
可以保护整个java产业在java上的巨大投资
3)在中小型项目中可以替代java,在大型java项目中可以嵌入groovy应用
2.Groovy 的特征
1)Groovy = java - 重复的样板代码
+ 可选的动态类型
+ 闭包(closures)
+ 领域规范语言(DSL)
+ 生成器(builders)
+ 元编程(metaprogramming)
2) groovy 是没有类型/修饰符/return/lterator,不需要导入集合的java.groovy 丢掉了许多java的包袱
3)不能确定变量类型时将变量类型设为Object
4) DSL:domain specific languages
5) 生成器:可以生成XML/HTML/Swing树状数据结构
6)元编程:运行时对类增加行为,类似于AOP
3.Eclipse的Groovy插件
1)Help -> software updates -> find and install -> search for new features -> new remote site
2)name:Groovy
url:http://dist.codehaus.org/groovy/distributions/update/
参考文档:http://t.csdn.cn/DsVEs
4.Groovy 数值
1)Groovy的一切都是对象。可以自动装箱与拆箱
2)整数123,-12,0都是Integer类的对象
定义变量(使用动态类型):
def price=100
等同于:Integer price = new Integer(100)
100.times{println 'Hello'} // 打印100次
语句可以不用";"结尾
3)浮点数据1.5,-3.14 都是BigDecimal类的对象
4)数值类型:
Integer 15
Long 100L, 100l
Float 1.23F, 4.22f
Double 1.23D, 4.22d
java.math.BigInteger 123G, 123G
java.math.BigDecimal 1.23G, 1.23g, 1.23
5)表达式与运算符
1)a==b 等价 a.equals(b)
2)Groovy的"==="就是java的"=="
3)Groovy支持操作符重载,重载运算符对应的方法就是操作符重载
4)"<<"操作符被重载,以支持向集合添加项
6)基于方法的运算符
assert 4+3==7 //4.plus(3)
assert 4-3==1 //4.minus(3)
assert 4*3==12 //4.multiply(12)
assert 4%3==1 //4.mod(3)
assert 4**3==64 //4.power(3)
assert 4/3==1.333333 //4.div(3)
assert 4.intdiv(3)==1 //整除
assert !(4==3) //!(4.equals(3))
assert 4!=3 //!4.equals(3)
assert !(4<3) //4.compareTo(3)<0
assert !(4<=3) //4.compareTo(3)<=0
assert 4>3 //4.compareTo(3)>0
assert 4>=3 //4.compareTo(3)>=0
assert 4<=>3==1 //4.compareTo(3)
assert 4<=>8==-1 //4.compareTo(3)
assert 4<=>4==0 //4.compareTo(3)
5.Groovy 集合概述
1)Groovy直接在语言内使用集合
不需要导入专门的类,也不需要初始化对象
集合是语言本身的本地成员
2)每个Groovy集合都是java.util.Conllection 或 java。util.Map的实例
3)List, String, StringBuffer, Range, Map, File Matcher 都使用统一的size()方法获取长度
6.Groovy 正则表达式
1)正则表达就是在Groovy中是本地语言级别的支持
def aRegex = ~'lxt'
println aRegex.class //输出: class java.util.regex.Pattern
def mat = 'lxt' = ~'lxt'
println mat.class //输出: class java.util.regex.Matcher
2)"~"开头的字符串是模式Pattern对象
7. Groovy 调用闭包
1)闭包是一个可执行的代码块
2)闭包在调用的时候才会执行
3)闭包内默认it,it是闭包的单个隐含参数
参数化闭包:
def bClosure={
println 'hello ${it}'
}
bClosure.call('tets')
bClosure('tets')
bClosure 'tets'
8.Groovy类分析
1)类/方法默认是public修饰符
2)默认情况下Groovy编译的类属性是私有的
3)变量与方法使用动态类型
4)Groovy自动提供构造函数,构造函数接受一个名称-值对的映射,名称-值对与类的属性相对应。不用初始化对象的每个属性
5)生成标准的setter和getter方法
6)可以通过"."语法间接地访问属性
7)在进行属性操纵时总是会调用setter和getter方法,即使直接通过"."语法访问属性也是如此
8)在java中这样只会输出所有对象的默认toString()实现,包类名@hashcode
9)覆盖默认的toString()实现,让输出效果更好
9.GroovySQl概述
1)GSQL结合利用闭包和迭代器,把资源管理的复旦转移到Groovy框架本身,从而简化HDBC编程
2)不用关闭Connection,也不用关闭ResultSet
3)Groovy把迭代机器变成隐含的,使用起来更简单
建立数据链接
1)import groovy.sql.*
def db = 'jdbc:mysql://主机/数据数据库?userUnicode=true&characterEncoding=UTF-8'
def user = 'root' //账户名
def password = '123456' // 用户密码
def driver = 'com.mysql.jdbc.Driver' //驱动
def sql = Sql.newInstance(db,user,password,driver)
//需要把mysql的驱动jar包拷贝至项目lib目录下
数据库的CRUD
sql.execute("delete from toys")
def searchToyName = 'toy1'
sql.eachRow("select * from toys where toyName=?",[searchToyName]){
toy-> println '\t\t'+ toy.toyName+ ':' + toy.unitPrice
}
操作DataSet
1) DataSet类是sql类的子类(可用Jad查看)
def toys = sql.dataSet('toys') //dataSet()参数是表名
toys.add(toyName:'toy2',unitPrice:'100')
toys.each{toy->
println '\t\t'+ toy.toyName+ ':' + toy.unitPrice
}