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));