springboot中JPA的相關操作

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章