1 介绍

Groovy是一种基于JVMJava虚拟机)的敏捷开发语言,它结合了PythonRubySmalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。

2 示例

2.1 依赖引入

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-jpa</artifactId>
  5. <version>2.4.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. <version>2.4.0</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.codehaus.groovy</groupId>
  14. <artifactId>groovy</artifactId>
  15. <version>3.0.3</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-test</artifactId>
  20. <version>2.4.0</version>
  21. <scope>test</scope>
  22. </dependency>
  23. <!-- mysql -->
  24. <dependency>
  25. <groupId>mysql</groupId>
  26. <artifactId>mysql-connector-java</artifactId>
  27. <version>8.0.21</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>junit</groupId>
  31. <artifactId>junit</artifactId>
  32. <version>RELEASE</version>
  33. <scope>compile</scope>
  34. </dependency>
  35. </dependencies>

2.2 JPA 实体类

  • 创建一个简单的Todo.groovy类,包含三个字段:id、task、isCompleted:

    1. @Entity
    2. @Table(name = 'todo')
    3. class Todo {
    4. /**
    5. * 唯一标识符
    6. */
    7. @Id
    8. @GeneratedValue(strategy = GenerationType.IDENTITY)
    9. Integer id
    10. /**
    11. * 任务的详细信息
    12. */
    13. @Column
    14. String task
    15. /**
    16. * 任务是否完成
    17. */
    18. @Column
    19. Boolean isCompleted
    20. }

    注意:bean不应该为字段提供访问修饰符,因为Groovy编译器已经为字段设置private属性,并为其生成了getter和setter方法。

    2.4 持久层

  • 该接口实现了JPA的JpaRepository类,它为我们封装了CRUD方法: ```groovy @Repository interface TodoRepository extends JpaRepository {

}

  1. <a name="cwomL"></a>
  2. ## 2.4 服务层
  3. - **_TodoService_**接口声明了CRUD我们需要的抽象方法:
  4. ```groovy
  5. interface TodoService {
  6. /**
  7. * 查询全部
  8. * @return todo
  9. */
  10. List<Todo> findAll()
  11. /**
  12. * 根据Id查询
  13. * @param todoId
  14. * @return todo
  15. */
  16. Todo findById(Integer todoId)
  17. /**
  18. * 增加任务
  19. * @param todo
  20. * @return todo
  21. */
  22. Todo saveTodo(Todo todo)
  23. /**
  24. * 修改任务
  25. * @param todo
  26. * @return
  27. */
  28. Todo updateTodo(Todo todo)
  29. /**
  30. * 根据Id删除
  31. * @param todoId
  32. * @return
  33. */
  34. Todo deleteTodo(Integer todoId)
  35. }
  • TodoServiceImpl实现了TodoService所有方法:

    1. @Service
    2. class TodoServiceImpl implements TodoService{
    3. @Autowired
    4. private TodoRepository todoRepository
    5. @Override
    6. List<Todo> findAll() {
    7. todoRepository.findAll()
    8. }
    9. @Override
    10. Todo findById(Integer todoId) {
    11. todoRepository.findById todoId get()
    12. }
    13. @Override
    14. Todo saveTodo(Todo todo) {
    15. todoRepository.save todo
    16. }
    17. @Override
    18. Todo updateTodo(Todo todo) {
    19. todoRepository.save todo
    20. }
    21. @Override
    22. Todo deleteTodo(Integer todoId) {
    23. todoRepository.deleteById(todoId)
    24. }
    25. }

    注意:Groovy特性调用方法时,可以省略圆括号。

    2.5 控制器层

    1. @RestController
    2. @RequestMapping('todo')
    3. class TodoController {
    4. @Autowired
    5. private TodoService todoService
    6. @GetMapping("getAll")
    7. List<Todo> getAllTodoList(){
    8. todoService.findAll()
    9. }
    10. @PostMapping("save")
    11. Todo saveTodo(@RequestBody Todo todo){
    12. todoService.saveTodo todo
    13. }
    14. @PutMapping("update")
    15. Todo updateTodo(@RequestBody Todo todo){
    16. todoService.updateTodo todo
    17. }
    18. @DeleteMapping('del')
    19. deleteTodo(@PathVariable @RequestParam("todoId") Integer todoId){
    20. todoService.deleteTodo todoId
    21. }
    22. @GetMapping('getById')
    23. Todo getTodoById(@PathVariable @RequestParam("todoId") Integer todoId){
    24. todoService.findById todoId
    25. }
    26. }

    2.6 引导Spring Boot应用程序

    1. @SpringBootApplication
    2. class SpringBootGroovyApplication {
    3. static void main(String[] args) {
    4. SpringApplication.run SpringBootGroovyApplication, args
    5. }
    6. }

    2.7 application.yml配置

    1. server:
    2. port: 8080
    3. servlet:
    4. context-path: /
    5. spring:
    6. datasource:
    7. hikari:
    8. username: root
    9. password: 123456
    10. # 最小空闲连接数量
    11. minimum-idle: 5
    12. # 空闲连接存活最大时间,默认600000(10分钟)
    13. idle-timeout: 180000
    14. # 连接池最大连接数,默认是10
    15. maximum-pool-size: 1000
    16. # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
    17. auto-commit: true
    18. # 连接池名称
    19. pool-name: HikariCP
    20. # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
    21. max-lifetime: 1800000
    22. # 数据库连接超时时间,默认30秒,即30000
    23. connection-timeout: 30000
    24. connection-test-query: SELECT 1
    25. data-source-properties:
    26. useInformationSchema: true
    27. driver-class-name: com.mysql.cj.jdbc.Driver
    28. url: jdbc:mysql://127.0.0.1:3306/my_groovy?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true

    2.8 测试

    image.png