SpringDataJpa
Spring Data JPA是较大的Spring Data系列的一部分,可轻松实现基于JPA的存储库。该模块处理对基于JPA的数据访问层的加强支持。它使构建使用数据访问技术的Spring支持的应用程序变得更加容易。java
实现应用程序的数据访问层已经很长一段时间了。为了执行简单查询以及执行分页和审核,必须编写太多样板代码。Spring Data JPA旨在经过将工做量减小到实际须要的数量来显着改善数据访问层的实现。做为开发人员,您将编写包括自定义finder方法在内的存储库接口,Spring会自动提供实现。spring
使用EntityManager 来建立原生查询语句
在service层的代码:sql
@PersistenceContext EntityManager entityManager; @Override public Object findMeetingSignRecoredPage(Long meetingId, Integer pageIndex, Integer pageSize) { MeenoAssert.notNull(meetingId, ErrEnum.MEETING_ID_IS_EMPTY); Meeting meeting = this.meetingRepository.getOne(meetingId); MeenoAssert.notNull(meeting,ErrEnum.MEETING_IS_NOT_EXIST); Pageable pageable = PageUtils.getPageable(pageIndex,pageSize); StringBuilder sql = new StringBuilder(); sql.append(" select ep.name,MAX(r.sign) from mnt_emp_rel_meeting as e "); sql.append(" left join mnt_sign_record as r on(r.employee_id=e.employee_id) "); sql.append(" left join mnt_employee as ep on(ep.id = e.employee_id) "); sql.append(" where e.meeting_id = ? "); sql.append(" order by r.sign desc,r.create_date asc "); Query query = entityManager.createNativeQuery(sql.toString()); query.setFirstResult(pageable.getOffset()); query.setMaxResults(pageable.getPageSize()); query.setParameter(1,meetingId); List<Object[]> list = query.getResultList(); List<SignRecordView> listView = Lists.newArrayList(); if(list != null && !list.isEmpty()){ for (Object[] objects : list) { String empName = objects[0]==null?null:objects[0].toString(); Integer sign = objects[1]==null?Constants.SIGN_RECORD_NO:Integer.parseInt(objects[1].toString()); SignRecordView view = new SignRecordView(); view.setEmployeeName(empName); view.setSign(sign); listView.add(view); } } //count StringBuilder countSql = new StringBuilder(); countSql.append(" select count(distinct e.id) from mnt_emp_rel_meeting as e "); countSql.append(" left join mnt_sign_record as r on(r.employee_id=e.employee_id) "); countSql.append(" left join mnt_employee as ep on(ep.id = e.employee_id) "); countSql.append(" where e.meeting_id = ? "); countSql.append(" order by r.sign desc,r.create_date asc "); Query countQuery = entityManager.createNativeQuery(countSql.toString()); countQuery.setParameter(1,meetingId); Object singleResult = countQuery.getResultList().get(0); Integer count = singleResult==null?0:Integer.valueOf(singleResult.toString()); Map<String, Object> resultPage = PageUtils.getResultPage(count, listView); return resultPage; }
PageUtils工具类代码以下:
package com.meeno.framework.page.utils; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.Data; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; /** * @description: 分页工具类 * @author: Wzq * @create: 2019-12-26 20:19 */ @Data public class PageUtils { /** *@Description 获取集合分页对象 *@Param [list, pageIndex, pageSize] *@Return void *@Author Wzq *@Date 2020/1/6 *@Time 14:07 */ public static <T> Map<String,Object> getCollectionPage(List<T> list, Pageable pageable){ if(list==null||list.isEmpty()){ return PageUtils.getResultPage(0,null ); } int offset = pageable.getOffset(); int pageSize = pageable.getPageSize(); List<T> listView = Lists.newArrayList(); if(list!=null && !list.isEmpty()){ if(list.size() < offset){ return PageUtils.getResultPage(0,null ); } for(;list.size() > offset && pageSize != 0 ; offset++,pageSize--){ listView.add(list.get(offset)); } return PageUtils.getResultPage(list.size(),listView); } return PageUtils.getResultPage(0,null ); } /** *@Description 根据pageIndex和pageSize获取Pageable *@Param [pageIndex, pageSize] *@Return org.springframework.data.domain.Pageable *@Author Wzq *@Date 2019/12/27 *@Time 11:12 */ public static Pageable getPageable(Integer pageIndex, Integer pageSize){ if(pageIndex==null){ pageIndex = 0; }else{ pageIndex--; } if(pageSize==null){ pageSize = 10; } PageRequest pageRequest = new PageRequest(pageIndex, pageSize); return pageRequest; } /** *@Description 获取分页返回对象 *@Param [totalCount, list] *@Return java.util.Map<java.lang.String,java.lang.Object> *@Author Wzq *@Date 2019/12/26 *@Time 20:22 */ public static Map<String,Object> getResultPage(Page<?> page, List<?> list){ Map<String,Object> resultPageMap = Maps.newHashMap(); resultPageMap.put("totalCount",page.getTotalElements()); resultPageMap.put("list",list); return resultPageMap; } public static Map<String,Object> getResultPage(Integer count, List<?> list){ Map<String,Object> resultPageMap = Maps.newHashMap(); resultPageMap.put("totalCount",count); resultPageMap.put("list",list); return resultPageMap; } }
我的微信公众,常常更新一些实用的干货:微信
