Groovy是一种功能强大,可选类型和动态 语言,与静态打字和静态编译功能,支持Java平台旨在提高开发人员的生产力得益于简洁,熟悉且简单易学的语法。它可以与任何Java程序顺利集成,并立即为您的应用程序提供强大的功能,包括脚本编写功能,领域特定语言编写,运行时和编译时元编程以及函数式编程。
Groovy中有以下特点:
首先我们先集成JDBC,再结合Groovy使用。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://192.168.31.158:3306/testjdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mysql.cj.jdbc.MysqlDataSource
User实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
/**
* 主键
*/
private Integer id;
/**
* 账号
*/
private String username;
/**
* 密码
*/
private String password;
}
UserController控制器:
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/findAll")
public List<Map<String, Object>> findAll(){
return userService.findAll();
}
}
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<Map<String, Object>> findAll() {
List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT * FROM t_user");
if (list.size() > 0) {
return list;
}
return null;
}
}
http://localhost:8081/api/findAll
<dependency>
<groupId>org.codehaus.groovygroupId>
<artifactId>groovy-allartifactId>
<version>3.0.7version>
<type>pomtype>
dependency>
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private UserGroovyService userGroovyService;
@GetMapping("/findAll")
public List<Map<String, Object>> findAll(){
return userService.findAll();
}
@GetMapping("/list")
public List<User> list(){
return userGroovyService.list();
}
}
此时注意看我们新的接口list,它的返回值就是一个List集合,泛型是User对象,此时我们创建一个GroovyService接口业务层。
@Service
class UserGroovyService {
@Autowired
private JdbcTemplate jdbcTemplate
List<User> list() {
return jdbcTemplate.queryForList("SELECT * FROM t_user") as List<User>
}
}
仔细看jdbcTemplate.queryForList方法,我们查看一下他的源码:
它的返回值是一个List集合,泛型是一个map集合,按照之前我们jdbc的写法,那么我们们这个位置:
也要是这样的类型,否则就需要处理类型,但是我们使用Groovy语法,它就不需要,直接给我转换成我们想要的集合类型了。
@GetMapping("/jdbc-add")
public boolean add(){
return userService.add();
}
public boolean add() {
// 插入数据库
Object[] args = new Object[]{
"dt","123456"};
int update = jdbcTemplate.update("INSERT INTO t_user(username, password) VALUES (?,?)", args);
return update > 0;
}
@GetMapping("/groovy-add")
public boolean add1(){
return userGroovyService.add();
}
boolean add() {
def username = 'dt2'
def passwpord = '123456'
return jdbcTemplate.update("INSERT INTO t_user(username, password) VALUES (?,?)",username,passwpord )
}
class Example {
static void main(String[] args) {
println('Hello World')
printf('Hello World')
}
}
class Example {
static void main(String[] args) {
// x is defined as a variable
String x = "Hello";
// The value of the variable is printed to the console
println(x);
}
}
定义变量
Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def。注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字
def a = 1 //定义一个整形
def b = "字符串" //定义一个字符串
def double c = 1.0 //定义一个 double 类型,也可以指定变量类型
定义函数
//无参函数
def fun1(){
}
//有参函数 , 无需指定参数类型
def fun2( def1 , def2 ){
}
使用…表示区间范围:
for (i in 0..5){
println("hello world")
}
def name = 'd'
def result = name ?: "abc"
println (result)
try {
println 5 / 0
} catch (anything) {
println (anything)
}
age = 36
def rate
switch (age) {
case 10..26:
rate = 0.05
break
case 27..36:
rate = 0.06
break
case 37..46:
rate = 0.07
break
default:
throw new IllegalArgumentException()
}
println( rate)
//String 转成 int
def s2 = s1 as int
//String 转成 int
def s3 = s1.asType(Integer)
Person person = new Person();
person.name = "zhaoyanjun"
person.age = 27
//把对象转换为 json 字符串
def json =JsonOutput.toJson(person)
println(json)
JsonSlurper jsonSlurper = new JsonSlurper()
//把字符串转换为对象
Person person1 = jsonSlurper.parseText(json)
println( person1.name )
Person person = new Person();
person.name = "zhaoyanjun"
person.age = 27
Person person1 = new Person();
person1.name = "zhaoyanjun2"
person1.age = 28
def list = [person,person1]
//把集合对象转换为 json 字符串
def jsonArray =JsonOutput.toJson(list)
println(jsonArray)
JsonSlurper jsonSlurper = new JsonSlurper()
//把字符串转换为集合对象
List<Person> list2 = jsonSlurper.parseText(jsonArray)
println( list2.get(1).name )
Groovy是一种动态语言,它和Java类似(算是Java的升级版,但是又具备脚本语言的特点),都在Java虚拟机中运行。当运行Groovy脚本时它会先被编译成Java类字节码,然后通过JVM虚拟机执行这个Java字节码类。