service中执行sql

根据请求参数拼接sql

import javax.persistence.Query;
import javax.persistence.EntityManager; @Autowired
private EntityManager em; StringBuffer sql = new StringBuffer();
// 执行sql
Query query = em.createNativeQuery(sql.toString());
// 返回值的集合(每个Object[]代表一行记录的值数组)
List<Object[]> data = query.getResultList();
// 获取对应的属性,顺序要和值的顺序一样(也就是表头)

Repository查询

sql形式的方法名

查询:

例:findAllByParamsKeyAndValue

findAllBy + 实体属性名(首字母大写)+ sql条件拼接关键字(And或Or)+ 实体属性名(首字母大写)

例: findByOrgIdAndApprovalIdOrderByApIdDesc

根据ApId字段降序

存在判断

例:existsById

existsBy + 实体属性名(首字母大写)

自定义sql

例:

import org.springframework.data.jpa.repository.Query;

@Query(
value =
"SELECT * FROM table_name WHERE id = ?1",nativeQuery = true)
EntityName selectOne(Long id);

动态拼接条件查询

例:

import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.CriteriaBuilder; * @param orgId id
* @param startDateFrom 开始时间
* @param endDateFrom 结束时间
* @param actName 名称 List<EntityName > all =
EntityNameRpository.findAll(
(root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>(); // and 条件
// 时间
if (StringUtils.isNotBlank(startDateFrom)) {
Date startDate = DateExtUtils.StringToDate(startDateFrom);
// startDate为实体属性名,下同理
predicates.add(
cb.greaterThanOrEqualTo(root.get("startDate").as(Date.class), startDate));
}
if (StringUtils.isNotBlank(endDateFrom)) {
Date endDate = DateExtUtils.StringToDate(endDateFrom);
predicates.add(cb.lessThanOrEqualTo(root.get("endDate").as(Date.class), endDate));
}
predicates.add(
cb.equal(root.get("rowst").as(Long.class), RowStatusEnum.VALID.getCode()));
// id信息
predicates.add(cb.equal(root.get("orgId").as(Long.class), finalOrgId));
// 模糊检索 名称
if (StringUtils.isNotBlank(actName)) {
predicates.add(cb.like(root.get("actName").as(String.class), "%" + actName + "%"));
}
// 添加in条件
CriteriaBuilder.In<String> in = cb.in(root.get("approvalId"));
List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
for (String approvalId : list1) {
in.value(approvalId);
}
CriteriaBuilder.In<String> in1 = cb.in(root.get("approvalId"));
list1.clear();
list1.add("4");
list1.add("10");
for (String approvalId : list1) {
in1.value(approvalId);
}
predicates.add(
cb.or(cb.and(in, cb.equal(root.get("approvalState"), accUser.getId())), in1)); return query
.orderBy(cb.desc(root.get("apId")))
.where(cb.and(predicates.toArray(new Predicate[0])))
.getRestriction();
});

以上均为个人理解,有待完善......

Jpa常用API的更多相关文章

  1. JPA常用注解

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.        JPA由EJB 3.0软件专家 ...

  2. JPA常用注解(转载)

    转自:http://blog.csdn.net/wanghuan203/article/details/8698102 JPA全称Java Persistence API.JPA通过JDK 5.0注解 ...

  3. Java基础学习总结(41)——JPA常用注解

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.         JPA由EJB 3.0软件专 ...

  4. JPA 相关API (一)

    [Query 接口下的常用API] [API 测试类:Test_QueryAPI.java] 1 package org.zgf.jpa.entity; 2 3 import java.math.Bi ...

  5. html5 canvas常用api总结(一)

    1.监听浏览器加载事件. window.addEventListener("load",eventWindowLoaded,false); load事件在html页面加载结束时发生 ...

  6. compass General 常用api学习[Sass和compass学习笔记]

    compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 ...

  7. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  8. C++ 中超类化和子类化常用API

    在windows平台上,使用C++实现子类化和超类化常用的API并不多,由于这些API函数的详解和使用方法,网上一大把.本文仅作为笔记,简单的记录一下. 子类化:SetWindowLong,GetWi ...

  9. node.js整理 02文件操作-常用API

    NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...

随机推荐

  1. 【一本通提高组合数学】 计算系数(NOIP2011提高组)

    题面 思路 根据二项式定理, 那么 算  需要用快速幂. 可以根据组合式的递推公式算组合数.我是这么写的. 或者是利用组合数的定义式,但是因为有取余, 所以要用逆元. 其中  为逆元, 这个可以直接用 ...

  2. 如何在 pyqt 中实现桌面歌词

    前言 酷狗.网抑云和 QQ 音乐都有桌面歌词功能,这篇博客也将使用 pyqt 实现桌面歌词功能,效果如下图所示: 代码实现 桌面歌词部件 LyricWidget 在 paintEvent 中绘制歌词. ...

  3. 4G巴歇尔槽流量采集网关

    首先向大家展示下拓扑图: 金鸽科技R10物联网网关,带有一个RS485口可以采集巴歇尔槽的液位状态,还提供一个网口用于给摄像头和现场其他的网络设备提供网络传输通道!R10A内置了巴歇尔槽液位换算成流量 ...

  4. 一篇文章带你搞定BFC~

    一.什么是BFC 是 Block Formatting Contexts 的缩写,名为"块级格式化上下文". 是指浏览器中创建了一个独立的渲染区域,并且拥有一套渲染规则,他决定了其 ...

  5. Regular采样类定义和测试

    这个算法是均匀采样算法,继承于Sampler类. 类声明: #pragma once #ifndef __REGULAR_HEADER__ #define __REGULAR_HEADER__ #in ...

  6. 正则表达式实战:最新豆瓣top250爬虫超详细教程

    检查网页源代码 首先让我们来检查豆瓣top250的源代码,一切网页爬虫都需要从这里开始.F12打开开发者模式,在元素(element)页面通过Ctrl+F直接搜索你想要爬取的内容,然后就可以开始编写正 ...

  7. CSP AFO后可以公开的情报

    10.08 早上和下午准备初赛,晚上考了套题,然后就摸文化课去了. \(250/250\) 手动模拟确实效果好 经验是把双刃剑,读题细致才是王道 T3是分治,一看到1e5的数据就习惯性往数据结构想,一 ...

  8. Spring源码 11 IOC refresh方法6

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  9. 数据库运维之路——关于tempdb暴增实战案例

    转眼间,2021年的第一个季度已经到了最后一个月了,由于疫情原因,最近一段时间一直在北京,基本上没有出差,每天上班下班的日子感觉时间过的好快,新的一年继续努力奋斗啊. 仔细回想一下,自己踏入到sql ...

  10. 应用集成-在Hexo、Hugo博客框架中使用Gitalk基于Github上仓库项目的issue无后端服务评论系统实践

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 Gi ...