1 介绍
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。
2 示例
2.1 依赖引入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.4.0</version>
<scope>test</scope>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
2.2 JPA 实体类
创建一个简单的Todo.groovy类,包含三个字段:id、task、isCompleted:
@Entity
@Table(name = 'todo')
class Todo {
/**
* 唯一标识符
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id
/**
* 任务的详细信息
*/
@Column
String task
/**
* 任务是否完成
*/
@Column
Boolean isCompleted
}
注意:bean不应该为字段提供访问修饰符,因为Groovy编译器已经为字段设置private属性,并为其生成了getter和setter方法。
2.4 持久层
该接口实现了JPA的JpaRepository类,它为我们封装了CRUD方法:
@Repository
interface TodoRepository extends JpaRepository<Todo, Integer> {
}
2.4 服务层
TodoService接口声明了CRUD我们需要的抽象方法:
interface TodoService {
/**
* 查询全部
* @return todo
*/
List<Todo> findAll()
/**
* 根据Id查询
* @param todoId
* @return todo
*/
Todo findById(Integer todoId)
/**
* 增加任务
* @param todo
* @return todo
*/
Todo saveTodo(Todo todo)
/**
* 修改任务
* @param todo
* @return
*/
Todo updateTodo(Todo todo)
/**
* 根据Id删除
* @param todoId
* @return
*/
Todo deleteTodo(Integer todoId)
}
TodoServiceImpl实现了TodoService所有方法:
@Service
class TodoServiceImpl implements TodoService{
@Autowired
private TodoRepository todoRepository
@Override
List<Todo> findAll() {
todoRepository.findAll()
}
@Override
Todo findById(Integer todoId) {
todoRepository.findById todoId get()
}
@Override
Todo saveTodo(Todo todo) {
todoRepository.save todo
}
@Override
Todo updateTodo(Todo todo) {
todoRepository.save todo
}
@Override
Todo deleteTodo(Integer todoId) {
todoRepository.deleteById(todoId)
}
}
注意:Groovy特性调用方法时,可以省略圆括号。
2.5 控制器层
@RestController
@RequestMapping('todo')
class TodoController {
@Autowired
private TodoService todoService
@GetMapping("getAll")
List<Todo> getAllTodoList(){
todoService.findAll()
}
@PostMapping("save")
Todo saveTodo(@RequestBody Todo todo){
todoService.saveTodo todo
}
@PutMapping("update")
Todo updateTodo(@RequestBody Todo todo){
todoService.updateTodo todo
}
@DeleteMapping('del')
deleteTodo(@PathVariable @RequestParam("todoId") Integer todoId){
todoService.deleteTodo todoId
}
@GetMapping('getById')
Todo getTodoById(@PathVariable @RequestParam("todoId") Integer todoId){
todoService.findById todoId
}
}
2.6 引导Spring Boot应用程序
@SpringBootApplication
class SpringBootGroovyApplication {
static void main(String[] args) {
SpringApplication.run SpringBootGroovyApplication, args
}
}
2.7 application.yml配置
server:
port: 8080
servlet:
context-path: /
spring:
datasource:
hikari:
username: root
password: 123456
# 最小空闲连接数量
minimum-idle: 5
# 空闲连接存活最大时间,默认600000(10分钟)
idle-timeout: 180000
# 连接池最大连接数,默认是10
maximum-pool-size: 1000
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
auto-commit: true
# 连接池名称
pool-name: HikariCP
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
max-lifetime: 1800000
# 数据库连接超时时间,默认30秒,即30000
connection-timeout: 30000
connection-test-query: SELECT 1
data-source-properties:
useInformationSchema: true
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/my_groovy?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true