首页 > 解决方案 > 知道如何实现只带来您搜索过的值的视图吗?

问题描述

我正在整理一个搜索页面,该页面使用具有超过 1000,000 个注册表的数据库。知道如何实现一个只带来你搜索过的值的视图吗?我已经能够使用较小的数据库(300)来做到这一点,但是,它会在搜索之前加载视图中的所有注册表。如果搜索字段为空,我需要它不返回任何内容。

(Spring MVC、JPA、Hibernate 和 Thymeleaf)。


    @PersistenceContext
    private EntityManager manager;

    @SuppressWarnings("unchecked")
    @Override
    @Transactional(readOnly = true)
    public Page<Alarme> filtrar(Alarme filtro, Pageable pageable) {

        int paginaatual = pageable.getPageNumber();
        int totalRegistrosPorPagina = pageable.getPageSize();
        int primeiroRegistro = paginaatual * totalRegistrosPorPagina;

        Criteria criteria = manager.unwrap(Session.class).createCriteria(Alarme.class);
        criteria.setFirstResult(primeiroRegistro);
        criteria.setMaxResults(totalRegistrosPorPagina);

        Sort sort = pageable.getSort();
        System.out.println(">>> sort: " + sort);
        if (sort != null) {
            Sort.Order order = sort.iterator().next();
            String property = order.getProperty();
            criteria.addOrder(order.isAscending() ? Order.asc(property) : Order.desc(property));
        }

        adicionarFiltro(filtro, criteria);

        return new PageImpl<>(criteria.list(), pageable, total(filtro));
    }

    private Long total(Alarme filtro) {
        Criteria criteria = manager.unwrap(Session.class).createCriteria(Alarme.class);
        adicionarFiltro(filtro, criteria);
        criteria.setProjection(Projections.rowCount());
        return (Long) criteria.uniqueResult();
    }

    private void adicionarFiltro(Alarme filtro, Criteria criteria) {
        if(filtro != null){
            if(!StringUtils.isEmpty(filtro.getIncidente())){
                criteria.add(Restrictions.ilike("incidente", filtro.getIncidente(), MatchMode.ANYWHERE));
            }
        }

        if(filtro != null){
            if(!StringUtils.isEmpty(filtro.getSite())){
                criteria.add(Restrictions.ilike("site", filtro.getSite(), MatchMode.ANYWHERE));
            }
        }
    }

}```


标签: spring-mvcspring-data-jpathymeleaf

解决方案


数据量大的时候,前面的数据很难全部加载。 搜索栏失去焦点的情况下,能否进行后端查询?


推荐阅读