前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
只是記錄下使用方法 :
1. ?RPC接口 service實現類調用,PageRequest對象會實現分頁、排序。
@Overridepublic Object getAAAByPage(Pageable pageable, String startTime, String endTime, String XXX, String XXX,String XXX, String XXX, String position, String jobTypeId,String projectId, String busId, String jobContent, String status) {Page<Workxxx> page = workxxxRepository.findAll(new Specification<Workxxx>() {@Overridepublic Predicate toPredicate(Root<Workxxx> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> list = new ArrayList<>();if(null != employeeNo && !"".equals("employeeNo")){list.add(cb.equal(root.<String>get("employeeNo"), employeeNo));}if(null != subDepartmentId && !"".equals("subDepartmentId")){list.add(cb.equal(root.<String>get("subDepartmentId"), subDepartmentId));}if(null != status && !"".equals("status")){list.add(cb.like(root.<String>get("status"), status));}if (null != startTime && !"".equals("startTime")) {list.add(cb.greaterThanOrEqualTo(root.<Date>get("startTime"), DateUtil.stringToDate(startTime)));}if (null != endTime && !"".equals("endTime")) {list.add(cb.lessThanOrEqualTo(root.<Date>get("endTime"), DateUtil.stringToDate(endTime)));}if (list.size() != 0) {Predicate[] p = new Predicate[list.size()];return cb.and(list.toArray(p));} else {return null;}}}, new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort()));return page;}
rest 接口直接調用RPC接口實現,rest接口實現 :
@Path("/我是路徑名")@GET@Overridepublic Payload getWorkxxxFillSituationByPage(@QueryParam("page") @DefaultValue("0") int page,@QueryParam("size") @DefaultValue("10") int size,@QueryParam("startTime") String startTime,@QueryParam("endTime") String endTime, ... ... @QueryParam("status") String status) {List<Order> orders = new ArrayList<Order>();orders.add(new Order(Direction.DESC,"startTime")); // startTime 為 排序依據字段Pageable pageable = new PageRequest(page, size, new Sort(orders));try {return new Payload(workXXXService.getAAAByPage(pageable, startTime,endTime, XXX, departmentId, XXX, employeeName, position, XXX, XXX, busId, jobContent, status));} catch (Exception ex) {logger.debug("XXX查詢失敗:",ex.getMessage());return null;}}
用GET請求訪問接口:
http://localhost:8082/類上注解的路徑/我是路徑名?page=0&size=2
2. ?這個接口只用聲明就可以了,基本的增、刪、改、查。JPA已經實現,并且只要被調用會自動執行,會自動解析方法名并處理對應業務。
這個相當于dao的聲明,也就是mybatis中的mapper :
@Repository
public interface WorkxxxRepository extends JpaRepository<Workxxx, Integer>, JpaSpecificationExecutor<Workxxx> {}
要用自己寫的原生sql,也可以實現它,并寫上自己的sql,給上注解說明使用本地sql?
@Query(value = "select u.id, u.username from XXX_user u inner join XXXX gpr on u.id = gpr.USER_ID where PROJECT_ID=?1 and USER_ID in (select USER_ID from " +"XXX where department_id = ?2)", nativeQuery=true)public List<Object[]> getXXXUserIds(String projectId, String departmentId);
3. ?實體給上對應注解,會自動關聯到實體對應數據庫表
@Entity(name = "workxxx")
@Table(name = "XXX_work_xxx")
@JsonIgnoreProperties(ignoreUnknown = true)
public class WorkWeight implements Serializable {private static final long serialVersionUID = 8245791221237374426L;@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Column(name = "employee_id", nullable = false)private String employeeId; ... ...
4. RPC接口 ?service 也可以不調用 repository ,直接寫sql 并運行:PageImpl 對象可以幫助封裝返回的數據
@Overridepublic Page<WorkxxxDto> getXXXCollectByPage(Pageable pageable, String startTime, String endTime,String projectId, String XXX, String employeeName, boolean isLastDetail) {EntityManager em = emf.createEntityManager();String sql ="select ad.id, gww.start_time,ad.name,gww.XXX," +" COUNT(gww.id) human,FORMAT(SUM(gww.proportion*5),1) days," +" gww.employee_no,gww.XXX,gww.XXX,gww.job_content,gww.XXX,gww.end_time "+" FROM XXX gww ,XXX ad " +" WHERE gww.department_id = ad.id and gww.job_type_id != 3 ";if(null != startTime && !"".equals(startTime)){ // 時間周期條件查詢sql += " and gww.start_time >= '"+startTime+"'";}if(null != endTime && !"".equals(endTime)){ // 時間周期條件查詢sql += " and gww.end_time <= '"+endTime+"'";}if(null != projectId && !"".equals("projectId")){sql += " and gww.projectId="+employeeName;}if(isLastDetail){ // 詳情sql += " and ad.id = '"+organizationId+"' GROUP BY gww.id";}else{// 根據組織分組if(null != organizationId && !"".equals(organizationId)){sql += " and ad.parent_id = '"+organizationId+"' GROUP BY WEEKOFYEAR(gww.start_time),ad.id";}else{ // 按部門分組,參數組織id為空sql += " and ad.parent_id in(SELECT id FROM XXX WHERE parent_id ='') GROUP BY WEEKOFYEAR(gww.start_time),ad.id,gww.project_id";}}String countSql ="select count(*) from ("+sql+") a"; // 查詢總條數(別忘了給子查詢起個別名,比如:a )Query queryCount = em.createNativeQuery(countSql);long totalElements = ((BigInteger)queryCount.getSingleResult()).longValue();// 查詢sqlsql += " ORDER BY gww.start_time DESC LIMIT "+pageable.getPageNumber()*pageable.getPageSize() +","+pageable.getPageSize();Query queryList = em.createNativeQuery(sql);List<Object> objecArraytList = queryList.getResultList();List<WorxxxDto> dtoList = new ArrayList<WorkxxxDto>();for(int i=0;i<objecArraytList.size();i++) {Object[] obj = (Object[]) objecArraytList.get(i);WorkxxxDto wwdto = new WorkxxxDto();wwdto.setOrganizationId(String.valueOf(obj[0]));wwdto.setStartTime(String.valueOf(obj[1]));wwdto.setOrganizationName(String.valueOf(obj[2]));wwdto.setProjectName(String.valueOf(obj[3]));String inputHumanDays = String.valueOf(obj[4]); dtoList.add(wwdto);}em.close();return new PageImpl(dtoList,pageable,totalElements);}
rest 接口直接調用RPC接口實現,rest接口實現 :
? ?在sql中已經人工分頁排序
@Path("/getBBB")@GET@Overridepublic Payload getWorkWeightApprovaEevolveByPage(@QueryParam("page") @DefaultValue("0") int page,@QueryParam("size") @DefaultValue("10") int size,@QueryParam("startTime") String startTime,@QueryParam("endTime") String endTime,@QueryParam("organizationId") String XXX,@QueryParam("isComplete") @DefaultValue("false") boolean isComplete) {Pageable pageable = new PageRequest(page, size);Map<String,Object> resultMap = null;try{return new Payload(workxxxCollectService.getWorkxxxApprovaEevolveByPage(pageable, startTime,endTime, organizationId, isComplete));}catch (Exception ex){logger.debug("XXX查詢失敗:",ex.getMessage());logger.debug(ex.getMessage());return null;}}
5. ?接口返回 json 數據樣例:
{"payload": {"content": [{"id": 20,"xxxyeeId": "21","xxxeeNo": "2","exeName": "xx需", "xxxtName": "XXXxx部","sxxxxxtId": "005FD84B2xxx3C0D956D","xxxxntName": "XXX室", "xxxxn": 0.4,"sxxime": "2017-08-28","xxime": "2017-09-03","status": 2, "updateTime": "2017-12-21","createBy": "ABC46xxx7CD79D2","updateBy": "22","xag": "0","cxxxt": 0}],"last": true,"totalElements": 1, // 總記錄條數"totalPages": 1,"number": 0,"size": 2,"first": true,"sort": [{"direction": "DESC", // 倒序"property": "startTime", // 排序依據字段,可以多字段"ignoreCase": false,"nullHandling": "NATIVE","ascending": false}],"numberOfElements": 1 // 當前頁記錄條數},"request_id": "2993e849-d4bf-442f-8690-6056b3f80377"}
?