SpringBoot整合Groovy构建Web应用程序

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

2.8 测试

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hikktn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值