Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics Spring JPA存储库使用Dandelion DatatableCriterias进行通用查找_Generics_Jpa_Jquery Datatables_Dao_Dandelion - Fatal编程技术网

Generics Spring JPA存储库使用Dandelion DatatableCriterias进行通用查找

Generics Spring JPA存储库使用Dandelion DatatableCriterias进行通用查找,generics,jpa,jquery-datatables,dao,dandelion,Generics,Jpa,Jquery Datatables,Dao,Dandelion,我找到了关于如何实现ajax服务器端处理的示例。在控制器上,代码如下所示 @RequestMapping(value = "/persons") public @ResponseBody DatatablesResponse<Person> findAllForDataTablesFullSpring(@DatatablesParams DatatablesCriterias criterias) { DataSet<Person> dataSet = perso

我找到了关于如何实现ajax服务器端处理的示例。在控制器上,代码如下所示

@RequestMapping(value = "/persons")
public @ResponseBody
DatatablesResponse<Person> findAllForDataTablesFullSpring(@DatatablesParams DatatablesCriterias criterias) {
    DataSet<Person> dataSet = personService.findPersonsWithDatatablesCriterias(criterias);
    return DatatablesResponse.build(dataSet, criterias);
}
在服务层上

    public DataSet<Person> findPersonsWithDatatablesCriterias(DatatablesCriterias criterias) {

    List<Person> persons = personRepository.findPersonWithDatatablesCriterias(criterias);
    Long count = personRepository.getTotalCount();
    Long countFiltered = personRepository.getFilteredCount(criterias);

    return new DataSet<Person>(persons, count, countFiltered);
   }
关于数据访问层

@Override
public List<Person> findPersonWithDatatablesCriterias(DatatablesCriterias criterias) {

    StringBuilder queryBuilder = new StringBuilder("SELECT p FROM Person p");

    /**
     * Step 1: global and individual column filtering
     */
    queryBuilder.append(PersonRepositoryUtils.getFilterQuery(criterias));

    /**
     * Step 2: sorting
     */
    if (criterias.hasOneSortedColumn()) {

        List<String> orderParams = new ArrayList<String>();
        queryBuilder.append(" ORDER BY ");
        for (ColumnDef columnDef : criterias.getSortingColumnDefs()) {
            orderParams.add("p." + columnDef.getName() + " " + columnDef.getSortDirection());
        }

        Iterator<String> itr2 = orderParams.iterator();
        while (itr2.hasNext()) {
            queryBuilder.append(itr2.next());
            if (itr2.hasNext()) {
                queryBuilder.append(" , ");
            }
        }
    }

    TypedQuery<Person> query = entityManager.createQuery(queryBuilder.toString(), Person.class);

    /**
     * Step 3: paging
     */
    query.setFirstResult(criterias.getDisplayStart());
    query.setMaxResults(criterias.getDisplaySize());

    return query.getResultList();
}

/**
 * <p>
 * Query used to return the number of filtered persons.
 * 
 * @param criterias
 *            The DataTables criterias used to filter the persons.
 *            (maxResult, filtering, paging, ...)
 * @return the number of filtered persons.
 */
    @Override
public Long getFilteredCount(DatatablesCriterias criterias) {

    StringBuilder queryBuilder = new StringBuilder("SELECT p FROM Person p");

    queryBuilder.append(PersonRepositoryUtils.getFilterQuery(criterias));

    Query query = entityManager.createQuery(queryBuilder.toString());
    return Long.parseLong(String.valueOf(query.getResultList().size()));
}

/**
 * @return the total count of persons.
 */
    @Override
public Long getTotalCount() {
    Query query = entityManager.createQuery("SELECT COUNT(p) FROM Person p");
    return (Long) query.getSingleResult();
}

我的问题是我需要重复编码数据访问层,这对于我的所有实体来说都是完全相同的。现在,我想有一个通用的实现。有人能给我一个解决办法吗。这对任何使用Dandelion Datatables插件的人来说都是一个很大的帮助。

因为,最近我也做过类似的工作,我可以给出一些建议。 首先,您肯定应该了解一下,因为Spring框架的这一部分为您提供了数据库访问级别所需的一切。 您需要创建一个扩展JpaRepository的@Repository,然后从这里查询您的数据库。 例如,可以用findAll方法替换getTotalCount,findAll方法返回所有实体的列表,或者更简单的,使用count方法。 然后,可以使用findAllPageable pageable检索分页数据,您只需要将新的PageRequestcriterias.getStart、criterias.getLength作为参数传递。 在Spring数据中,通过Sort类也可以使用排序选项,它与Dandelion DataTablesCriteria和ColumnDef类配合使用非常好。 对于更复杂的查询,可以使用@Query和@Param注释。
因此,有关spring数据的更多具体信息,最好提出新问题。

在使用spring MVC时,您是否考虑过使用spring数据模块。这样就不需要围绕常见的CRUD操作编写大量的boiler plate代码,并支持即时分页等。