我有一个表 Admin,其中可能包含 1000 条甚至更多记录。现在,我对使用哪个查询感到困惑,这样获取整个数据时的性能不会受到影响。
我尝试使用本机查询和条件查询来获取数据,但仅限于少量数据。我也研究了相关问题,但并不能完全满足我的问题。
原生查询比 Hibernate 中的 HQL/Criteria 查询更快
我的实体类看起来像:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String emailAddress;
private String password;
private Character status;
Run Code Online (Sandbox Code Playgroud)
使用条件查询:
public List<Admin> fetchAdmin() {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Admin> criteria = builder.createQuery(Admin.class);
List<Admin> adminList = entityManager.createQuery(criteria).getResultList();
return adminList;
}
Run Code Online (Sandbox Code Playgroud)
使用本机查询:
@Query(value = "SELECT * FROM admin", nativeQuery = true)
List<Admin> fetchAllAdmins();
Run Code Online (Sandbox Code Playgroud)
我期望选择一个可以获取大数据的查询。
我在当前的 spring-boot 项目中使用 JPA 查询。如何添加非标准化 SQL 函数,如GROUP_CONCAT?
之前,我以前的问题: 如何在 JPA 查询中的一行逗号分隔列表中显示列结果
我发现 GROUP_CONCAT 不是 JPA 查询中的注册函数,但可以通过手动注册来访问它。我已经尝试过以下链接,但对我不起作用:
如何在 Spring Boot 应用程序中添加非标准化的 sql 函数?
https://thoughts-on-java.org/database-functions/
https://vladmihalcea.com/hibernate-sql-function-jpql-criteria-api-query/
1.
public class SqlFunctionsMetadataBuilderContributor
implements MetadataBuilderContributor {
@Override
public void contribute(MetadataBuilder metadataBuilder) {
metadataBuilder.applySqlFunction(
"group_concat",
new StandardSQLFunction(
"group_concat",
StandardBasicTypes.STRING
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
2.
public String render(Type firstArgumentType, List arguments, SessionFactoryImplementor factory)
throws QueryException {
if (arguments.size() < 1) {
throw new QueryException(new IllegalArgumentException("group_concat should have at …Run Code Online (Sandbox Code Playgroud)