Spring Boot
可以用 Spring Data REST 生成 REST 接口。IDEA 创建项目时添加依赖 Rest Repositories、Spring Data JPA。
实现 Entity
package com.example.demo.entity;
import jakarta.persistence.*;
@Entity
@Table(name = "users") // 这个是指定表名,PostgreSQL 不能用 user 做表名
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private Integer age;
private String email;
// getter and setter
}
实现 Repository
package com.example.demo.repository;
import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(path = "users") // 这个是配置生成 REST 接口,不写不生成
public interface UserRepository extends JpaRepository<User, Integer> {
}
测试接口
Quarkus
可以用 Panache 生成 REST 接口。IDEA 创建项目时添加依赖 REST Jackson、REST resources for Hibernate ORM with Panache、JDBC Driver - PostgreSQL。
实现 Entity
package com.example.entity;
import io.quarkus.hibernate.reactive.panache.PanacheEntityBase;
import jakarta.persistence.*;
@Entity
@Table(name = "users") // 这个是指定表名,PostgreSQL 不能用 user 做表名
public class User extends PanacheEntityBase { // 这个和上边的区别是继承了 PanacheEntityBase
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private Integer age;
private String email;
// getter and setter
}
实现 Resource
package com.example.resource;
import com.example.entity.User;
import io.quarkus.hibernate.reactive.rest.data.panache.PanacheEntityResource;
@ResourceProperties(path = "users") // 这个是配置生成 REST 接口,不写使用默认配置生成
public interface UserResource extends PanacheEntityResource<User, Integer> {
}
测试接口
Micronaut
Micronaut 不能生成 REST 接口。IDEA 创建项目时添加依赖 Micronaut Data JPA、PostgreSQL。
实现 Entity
@Serdeable // 这个和上边的区别是声明了序列化
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private Integer age;
private String email;
// getter and setter
}
实现 Repository
package com.example.repository;
import com.example.entity.User;
import io.micronaut.data.annotation.Repository;
import io.micronaut.data.jpa.repository.JpaRepository;
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
}
实现 Controller
package com.example.controller;
import com.example.entity.User;
import com.example.repository.UserRepository;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Produces;
import jakarta.inject.Inject;
import java.util.List;
@Controller("/users")
public class UserController {
@Inject
UserRepository userRepository;
@Get
@Produces(MediaType.APPLICATION_JSON)
public List<User> getAllUsers() {
return userRepository.findAll();
}
@Get("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public User getUser(Integer id) {
return userRepository.findById(id).orElse(null);
}
}
测试接口
Helidon
待补充。