(spring boot)spring data JPA 高级动态查询, 排序加分页加多参数查询 返回二元组
业务需求是根据前端传来的四个参数进行匹配查询, 并且要将总共查出来的数据总数返回至前端(因为前端有进行分页, 首尾页等), 但是前端未必会传来四个参数, 也可能是随机的其中一个,两个等. 这时候如果自己在dao层,手写查询方法或者sql语句需要大量代码, 并且非常麻烦, 在多方查阅资料,以及询问公司前辈的情况下, 终于完成了项目需求,
贴出前端查询页面:
先贴出二元组的代码,
package com.leadmap.mapservice.common;
/**
* Company:
* Description:
*
* @author: ljy
* @Date: 2019/1/3 15:27
*/
public class TwoTuple<A, B> {
public final A first;
private final B second;
public TwoTuple(A a, B b){
first = a;
second = b;
}
public A getFirst() {
return first;
}
public B getSecond(){
return second;
}
@Override
public String toString(){
return "(" + first + ", " + second + ")";
}
}
controller层代码:
package com.leadmap.mapservice.controller;
import com.leadmap.mapservice.common.TwoTuple;
import com.leadmap.mapservice.dao.DocumentInfoDao;
import com.leadmap.mapservice.dao.OpinionFeedbackDao;
import com.leadmap.mapservice.dao.UserCollectDocDao;
import com.leadmap.mapservice.dao.UserLikeDocDao;
import com.leadmap.mapservice.dto.ResultInfo;
import com.leadmap.mapservice.entity.DocumentInfo;
import com.leadmap.mapservice.entity.OpinionFeedback;
import com.leadmap.mapservice.service.DocumentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* Company:
* Description:
*
* @author: ljy
* @Date: 2018/12/20 10:31
*/
@Controller
public class DocumentController {
private final static Logger logger = LoggerFactory.getLogger(DocumentController.class);
@Auto