spring-data-jpa 使用

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

只是记录下使用方法 :

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker的安装与安装mysql(mac,centos为例)

一、mac安装docker 1、去这个网站下载安装https://www.docker.com/get-started 2、运行docker 运行开启docker docker run -dp 80:80 docker/getting-started 二、centos8安装docker 1、安装docker 下载低版本的 yum install -y docker-ce --nobest 2、安装扩展 wget http…

配置PPPOE

先配置服务端PPPOE-Server先为路由添加一个账号为PPP所使用[PPPOE-Server]aaa [PPPOE-Server-aaa]local-user test password cipher 123 //添加一个本地账号[PPPOE-Server-aaa]local-user test service-type ppp//设置test账号类型为PPP账号[PPPOE-Server]ip pool test//添加一…

eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创

IntelliJ IDEA是一款功能强大的开发工具&#xff0c;在代码自动提示、重构、J2EE支持、各类版本工具(如git、svn、github)、maven等方面都有很好的应用。 IntelliJ IDEA有免费的社区版和付费的旗舰版。免费版只支持Java等为数不多的语言和基本的IDE特性&#xff0c;旗舰版还支持…

laravel安装prettier,git hook代码格式化工具

1、安装prettier的php扩展 npm install --global prettier prettier/plugin-php 2、安装husky&#xff0c;lint-staged&#xff08;git钩子&#xff09;使用 npm i prettier lint-staged husky -D 3、修改package.json文件 在scripts后面添加两个函数 "husky": …

C语言指针数组和数组指针

一、指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别。其实很好理解&#xff1a;指针数组&#xff1a;首先它是一个数组&#xff0c;数组的元素都是指针&#xff0c;数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针&#xf…

求二叉树的高度

1 int GetHeight(BinTree BT)2 {3 int HL, HR, MaxH;4 5 if(BT)6 {7 HL GetHeight(BT->Left); //求左子树的高度8 HR GetHeight(BT->Right); //求右子树的高度9 MaxH (HL > HR) ? HL : HR; //取左右子树较大的高…

Json与List的相互转换

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 问题由来&#xff1a; 最近由于做一个项目&#xff0c;项目的一个功能就是根据Listview的内容生成一个二维码&#xff0c;然后扫描二维…

机器学习常用模型

&#xff08;原作&#xff1a;MSRA刘铁岩著《分布式机器学习&#xff1a;算法、理论与实践》。这一部分叙述很清晰&#xff0c;适合用于系统整理NN知识&#xff09; 线性模型 线性模型是最简单的&#xff0c;也是最基本的机器学习模型。其数学形式如下&#xff1a;g(X;W)WTX。有…

(转)告别程序员生涯,一点感慨,与诸君共勉

转自&#xff1a;https://blog.csdn.net/phphot/article/details/2230411 再过几天&#xff0c;我就正式告别程序员生涯了&#xff0c;这也是我最后一次以职业程序员身份在CSDN发表文章。小弟谈谈入行几年来的感受&#xff0c;做一个人生阶段的自我总结&#xff0c;同时希望能…

C语言指针与数组之间的恩恩怨怨

很多初学者弄不清指针和数组到底有什么样的关系。我现在就告诉你&#xff1a;他们之间没有任何关系&#xff01;只是他们经常穿着相似的衣服来逗你玩罢了。指针就是指针&#xff0c;指针变量在32 位系统下&#xff0c;永远占4 个byte&#xff0c;其值为某一个内存的地址。指针可…

CentOS7查看开放端口命令

CentOS7查看开放端口命令CentOS7的开放关闭查看端口都是用防火墙来控制的&#xff0c;具体命令如下&#xff1a;查看已经开放的端口&#xff1a;Linux代码 firewall-cmd --list-ports 开启端口Linux代码 firewall-cmd --zonepublic --add-port80/tcp --permanent 命令含义&…

referer参数和addslashes()函数的骚路子

TIPS: 此函数确实是过滤用户输入的&#xff0c;当gpc未开启的时候使用addslashes()函数进行过滤&#xff0c;当开启gpc的时候直接返回&#xff0c;那么问题就来了&#xff0c;当php开启gpc的时候直接返回字符串&#xff0c;但是gpc是只针GET,POST,COOKIE三种超全局变量进行过滤…

MySQL 的各个json 函数说明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如果英文的不方便阅读&#xff0c;请参考个人收录的另一篇中文解说&#xff1a;MySQL中json函数说明和举例 只是为了方便 自己用的时候…

订单编号,递增且不连续(php版)

1、实现方式&#xff0c;使用while循环&#xff0c;比较low&#xff0c;200w条数据 2s public function getMany ($startNum, $count) {$num $startNum;$codes[] $startNum;for($i1;$i<$count;$i){$num1 random_int(1,9);while($num $num1) {$num1 random_int(1,9);}$…

一文搞懂:词法作用域、动态作用域、回调函数、闭包

把以前一直只限于知道&#xff0c;却不清晰理解的这几个概念完完整整地梳理了一番。内容参考自wiki页面&#xff0c;然后加上自己一些理解。 词法作用域和动态作用域 不管什么语言&#xff0c;我们总要学习作用域(或生命周期)的概念&#xff0c;比如常见的称呼&#xff1a;全局…

C语言函数指针

一、函数指针的定义 顾名思义&#xff0c;函数指针就是函数的指针。它是一个指针&#xff0c;指向一个函数。看例子&#xff1a;A)char * (*fun1)(char * p1,char * p2);B)char * *fun2(char * p1,char * p2);C)char * fun3(char * p1,char * p2);看看上面三个表达式分别是什么…

程序员进阶之算法练习:LeetCode专场

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由落影发表 前言 LeetCode上的题目是大公司面试常见的算法题&#xff0c;今天的目标是拿下5道算法题&#xff1a; 题目1是基于链表的大数加法&#xff0c;既考察基本数据结构的了解&#xff0c;又考察在…

vim 安装vim-prettier

1、在.vimrc中添加 配置没有安装成功的话 git clone https://github.com/prettier/vim-prettier Plug prettier/vim-prettier, { do: yarn install, for: [javascript, typescript, css, less, scss, json, graphql, markdown, vue, yaml, html, php] } let g:prettier#aut…

详解Mysql中的JSON系列操作函数

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、方法罗列&#xff1a; 分类 函数 描述创建jsonjson_array 创建json数组json_object 创建json对象 json_quote 将json转成json字符串…

WEB/H5性能优化总结

我们今天来说说前端图形渲染优化&#xff0c;因为我接下来的时间可能要开始研究webgl方面的东西&#xff0c;所以就在这里把之前做过的H5做一个总结&#xff0c;现同步发布于GERRY_BLOG&#xff0c;TiMiGerry-知乎&#xff0c;转载请保留链接。静态资源-图片 一 、图片格式JPEG…