1、dataObject
/**
* 複合主鍵
*/
@Data
public class ProjectCompanyKeys implements Serializable{
private String projectNo;//項目編號
private String companyNo;//實施單位編號
}
/**
*
* 實體類
*/
@Data
@Entity
@Table(name = "PROJECT_COMPANY_REL")
@IdClass(ProjectCompanyRelKeys.class)
public class ProjectCompanyRel{
@Id
@Column(name="PROJECT_NO")
private String peojectNo;
@Id
@Column(name="COMPANY_NO")
private String companyNo;
@Column(name="COMPANY_ACCNO")
private String companyAccno;
@Coloumn(name="STATUS")
private String status;
}
2、repository
public interface ProjectCompanyRelRepository extends JpaRepository<ProjectCompanyRel,ProjectCompanyRelKeys>,JpaSpecificationExcutor<ProjectCompanyRel>{
}
3、service
a、predicate實現多條件以及分頁查詢
private Object getPageData(Map<Stirng,Object> map,Pageable pageable){
Specification<Company> specification =new Specification<companyInfo>(){
@Overide
public Predicate toPredicate(Root<CompanyInfo> root,CriteriaQuery<?> query,CriteriaBuilder criteriaBuilder){
Predicate predicate =null;
ArrayList<Predicate> predicate = new ArrayList<>();
//獲取predicate
Object companyNo=map.get("companyNo");
Object CompanyName=map.get("companyName");
Object status=map.get("status");
if(companyNo != null && !"".equals(companyNo.toStirng()))
predicate.add(criteraBuilder.equal(root.get("companyNo").as(String.class),companyNo));
if(companyName!=null && !"".equals(companyName.toStirng()))
predicate.add(criteraBUilder.like(root.get("companyName").as(String.class),"%"+companyName+"%"));
//添加in條件,字段status
if(status != null){
ArrayList<String> statustring=(ArrayList<String>)status;
Path<String> statusPath=Root.get("status");
CriteriaBulder.In<String> in = criteriabuilder.in(statusPath);
for(String s:statustring){
in.value(s);
}
predicate.add(in);
}
predicate=criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
return predicate;
}
}
//判斷是否需要分頁
if(pageable == null){
return companyInfoRepository.findAll(specification);
}else{
return companyInfoRepository.findAll(sprcification,pagecble);
}
}
//調用getPageData()方法
HashMap<String,Object> map=new HashMap<>;
map.put("companyNo","123");
companyService.selectByMapPage(map,new PageRequest(currPage-1,pagesize));//currPage當前頁碼,pagesize頁面條數
b、自定義查詢語句
//serviceImpl中引入
@PersistenceContext
private EntityManager entityManager;
//自定義sql語句實現
//基礎sql
StringBuffer dataBuffer = new StringBuffer("select * from COMPANY_INFO where 1=1");
//聚合sql
StirngBuffer countBuffer =new StringBuffer("select count(*) from COMPANY_INFO where
1=1");
Object companyNo=paraMap.get("companyNo");
Object companyName=paraMap.get("companyName");
//條件構造
StringBuffer paramBuffer = new StringBuffer();
if(companyNo!=null && !"".equals(companyNo))
paramBuffer.append(" and companyNo like '%"+companyNo+"%'");
...
//排序字段
StringBuffer orderBuffer=new StringBuffer(" order by company_no asc");
//sql拼接
String datasql = (dataBuffer.append(paramBuffer).append(orderBuffer)).toString();
String countsql = (dataBuffer.append(paramBuffer)).toString();
//執行sql
Query dataQuery = entityManager.createNativeQuery(datasql);
Query dataQuery = entityManager.createNativeQuery(countsql);
dataQuery.setFirstResult((int)pageable.getOffset());
dataQuery.setMaxResults(pageable.getPagesize());
Bigdecimal count = (Bigdecimal)countQuery.getSignleResult();
Long total = count.longValue;
List<Object[]> content = total > pageable.getOffset()?dataQuery.getResultList() : Collections.emptyList();
PageImpl<Object[]> objects = new PageImpl<>(content,pageable,total);
if(objects == null || objects.getTotalElments() == 0L)
return null;
List<Object[]> returnData = Objects.getContent();//本頁數據
long totalElements=objects.getTotalElements();//總數量
int totalPage=objects.getTotalPages();//總頁數
//封裝數據
List<Object> returnList = new ArrayList<>();
for(Object[] row objects){
HashMap<String,Object> returnMap=new HashMap<String>();
map.put("companyNo",row[0])
returnList.add(returnMap);
}
MyPage<Object> objectMyPage = new MyPage<>();
objectMyPage.setContent(returnList);
objectMyPage.setTotalNum(totalElements);
objectMyPage.setTotalPage(totalPage);
return objectMyPage;
//調用
HashMap<Stirng,Object> map =new HashMap<String,Object>();
map.put("companyNo","123");
companySerivce.selectByMyPage(map,new PageRequest(currPage-1,pagesize));