前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

只是记录下使用方法 :

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"}

spring-data-jpa 使用相关推荐

  1. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

  2. Spring Data JPA 五分钟快速入门和实践

    Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...

  3. Spring Data JPA(官方文档翻译)

    关于本书 介绍 关于这本指南 第一章 前言 第二章 新增及注意点 第三章 项目依赖 第四章 使用Spring Data Repositories 4.1 核心概念 4.2 查询方法 4.3 定义rep ...

  4. Hibernate、JPA、Spring Data JPA,傻傻分不清

    国庆假期接近尾声,明天最后一天了,要开始收收心啦- 今天讲讲一个初学者(或许一些老手)可能没去搞懂的几个概念:Hibernate.JPA.Spring Data JPA 之间的关联. 嘿嘿,前段时间有 ...

  5. Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?

    来源:jianshu.com/p/3927c2b6acc0 概述 Spring Data JPA是Spring Data的子模块.使用Spring Data,使得基于"repositorie ...

  6. Spring Boot 、Spring Data JPA、Hibernate集成

    ###什么是JPA JPA是用于管理Java EE 和Java SE环境中的持久化,以及对象/关系映射的JAVA API 最新规范为"JSR 338:Java Persistence 2.1 ...

  7. Spring Data JPA例子[基于Spring Boot、Mysql]

    关于Spring Data Spring社区的一个顶级工程,主要用于简化数据(关系型&非关系型)访问,如果我们使用Spring Data来开发程序的话,那么可以省去很多低级别的数据访问操作,如 ...

  8. springdatajpa命名规则_简单了解下spring data jpa

    公司准备搭建一个通用框架,以后项目就用统一一套框架了 以前只是听过jpa,但是没有实际用过 今天就来学习下一些简单的知识 什么是JPA 全称Java Persistence API,可以通过注解或者X ...

  9. Spring Data JPA

    1.    概述 Spring JPA通过为用户统一创建和销毁EntityManager,进行事务管理,简化JPA的配置等使用户的开发更加简便. Spring Data JPA是在Spring JPA ...

  10. spring data jpa从入门到精通_Spring Data JPA的简单入门

    前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...

最新文章

  1. SpringBoot 集成 Elasticsearch
  2. python解决约瑟夫问题_Python实现约瑟夫环问题的方法
  3. asp.net 中Gridview 使用总结
  4. JVM、JRE和JDK的概念
  5. github仓库上的漏洞修复
  6. 五天学习MySQL 数据库教程(一)1.2SQL介绍
  7. android surfaceview 技术,Android中SurfaceView的理解和使用
  8. 享受梦幻技术盛宴,相约 Unite 2020
  9. vue.js 入门案例,双向绑定实现任务清单
  10. xs资料网-jdpaint编程图档下载_限时下载 | 西门子、三菱、欧姆龙PLC电气设计与编程自学宝典(3册)...
  11. 【JAVA程序设计】(C00019)javaweb高校社团管理系统
  12. 链表排序总结(全)(C++)
  13. 记一次Mac挖矿病毒的处置
  14. ZCMU--1585: 面试
  15. python3GUI--adb调试测试工具By:PyQt5(附下载地址)
  16. 计算机五笔是什么时候学的吗,现在学习五笔打字,还有必要吗?
  17. 360VSQQ的精心之战
  18. win10 计算机重启,win10电脑自动重启
  19. 区域D绕直线L旋转形成的旋转体体积计算
  20. 怎么做用户流失召回,提升用户留存率

热门文章

  1. pandas 批量修改列名_pandas修改DataFrame列名的方法
  2. 一些网站github等无法连接服务器的解决办法
  3. 【HDU - 5017】Ellipsoid(爬山算法,模拟退火,三分)
  4. *【 POJ - 1007 】DNA Sorting(枚举,类似三元组找第二元问题)
  5. 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)
  6. 0.Overview
  7. 两台虚拟服务器如何级联,[教程] 利用open vswitch建立vxlan隧道实现不同主机上的虚拟交换机级联...
  8. 2019蓝桥杯Java决赛题答案_2019第十届蓝桥杯JavaB组省赛真题详解
  9. 计算机中丢失setupxml.dll,Win7电脑安装VideoStudio Pro X6显示丢失SetupXML.dll文件怎么解决...
  10. android 退出函数,android – 关闭应用程序与退出按钮