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/*** 任务的详细信息*/@ColumnString task/*** 任务是否完成*/@ColumnBoolean isCompleted}
注意:bean不应该为字段提供访问修饰符,因为Groovy编译器已经为字段设置private属性,并为其生成了getter和setter方法。
2.4 持久层
该接口实现了JPA的JpaRepository类,它为我们封装了CRUD方法: ```groovy @Repository interface TodoRepository extends JpaRepository
{
}
<a name="cwomL"></a>## 2.4 服务层- **_TodoService_**接口声明了CRUD我们需要的抽象方法:```groovyinterface 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所有方法:
@Serviceclass TodoServiceImpl implements TodoService{@Autowiredprivate TodoRepository todoRepository@OverrideList<Todo> findAll() {todoRepository.findAll()}@OverrideTodo findById(Integer todoId) {todoRepository.findById todoId get()}@OverrideTodo saveTodo(Todo todo) {todoRepository.save todo}@OverrideTodo updateTodo(Todo todo) {todoRepository.save todo}@OverrideTodo deleteTodo(Integer todoId) {todoRepository.deleteById(todoId)}}
2.5 控制器层
@RestController@RequestMapping('todo')class TodoController {@Autowiredprivate 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应用程序
@SpringBootApplicationclass SpringBootGroovyApplication {static void main(String[] args) {SpringApplication.run SpringBootGroovyApplication, args}}
2.7 application.yml配置
server:port: 8080servlet:context-path: /spring:datasource:hikari:username: rootpassword: 123456# 最小空闲连接数量minimum-idle: 5# 空闲连接存活最大时间,默认600000(10分钟)idle-timeout: 180000# 连接池最大连接数,默认是10maximum-pool-size: 1000# 此属性控制从池返回的连接的默认自动提交行为,默认值:trueauto-commit: true# 连接池名称pool-name: HikariCP# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟max-lifetime: 1800000# 数据库连接超时时间,默认30秒,即30000connection-timeout: 30000connection-test-query: SELECT 1data-source-properties:useInformationSchema: truedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/my_groovy?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true
2.8 测试

