有啥比在 Java Spring Boot 中使用自定义查询更好的方法?
Posted
技术标签:
【中文标题】有啥比在 Java Spring Boot 中使用自定义查询更好的方法?【英文标题】:What is the better way than using customized query in Java Spring Boot?有什么比在 Java Spring Boot 中使用自定义查询更好的方法? 【发布时间】:2018-11-06 20:18:54 【问题描述】:这是在我的 Service 包中用 Play 框架编写的:
public static BigInteger validUsername(JsonNode user)
Query query = JPA.em().createNativeQuery("SELECT COUNT(u.userId) FROM "+USER_TABLE+" u where username = ? and status != 'deleted'");
query.setParameter(1, user.findPath("userName").asText());
BigInteger count = (BigInteger) query.getSingleResult();
return count;
有没有更好的方法在 Java Spring Boot 应用程序中实现相同的功能?
【问题讨论】:
Is it possible to use raw SQL within a Spring Repository的可能重复status
列是 Postgres 枚举还是文本?
【参考方案1】:
为此,您可以使用 JPA 和 Spring Data JPA。这意味着您应该将表映射到实体,例如:
@Entity
@Table(name = "USER_TABLE")
public class User
@Id
private Long userId;
private String username;
private String status;
// Getters, setters, ...
之后,您可以使用 Spring Data JPA 编写存储库:
public interface UserRepository extends JPARepository<User, Long>
这还允许您以多种方式编写自定义查询,例如使用 @Query
注释、查询方法等。
public interface UserRepository extends JPARepository<User, Long>
@Query("select count(u.userId) from User u where u.username = :username AND u.status != 'deleted'")
int countNonDeletedUsersByUsername(@Param String username);
此查询使用 JPQL(JPA 的一种查询语言),但如果您更喜欢编写本机查询,您可以始终启用 nativeQuery
标志,如 the documentation 所述:
@Query
注释允许通过将nativeQuery
标志设置为true
来运行本机查询。
【讨论】:
【参考方案2】:我可能会建议您使用 JPA 存储库。 HERE
您可能会发现很多如何实现它的示例。
简而言之,存储库中的方法应如下所示:
public interface CustomerRepository extends CrudRepository<Customer, Long>
List<Customer> findByLastName(String lastName);
如果你想在例子中使用原生查询,你可以使用@Query注解并输入你的查询作为参数。
@Query("SELECT t.title FROM Todo t where t.id = :id")
String findTitleById(@Param("id") Long id);
【讨论】:
以上是关于有啥比在 Java Spring Boot 中使用自定义查询更好的方法?的主要内容,如果未能解决你的问题,请参考以下文章