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. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

  2. JAVA定时任务原理入门

    本文适用语言:java 序章:定时任务实现方式 当下,java编码过程中,实现定时任务的方式主要以以下两种为主 spring框架的@Scheduled quzrtz框架 网络上关于这两种框架的实践和配 ...

  3. NFS 服务器配置(Ubuntu)

    # NFS 服务器配置(Ubuntu 20.0) # 1.配置网络环境 # NFS 的客户端和服务端必须在同一局域网 # 2.在服务器上安装nfs sudo apt-get install nfs-c ...

  4. 用JavaScript写随机出一个颜色

    function changeColor(){ var r = parseInt(Math.random()*255) var g = parseInt(Math.random()*255) var ...

  5. 完成 DolphinScheduler 新手任务赢好礼活动 | 倒计时3 天

    想轻松参与 DolphinScheduler 项目贡献吗? 想获得 500 元京东购物卡吗? 参与活动,有机会得更多活动奖励! 活动截止至6月30日 了解更多详情: 在你参与 DolphinSched ...

  6. springmvc静态资源配置

    <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springf ...

  7. Git 10 IDEA撤销推送

    参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 如果推送了多 ...

  8. mybatis 10: 动态sql --- part2

    < foreach >标签 作用 用来进行循环遍历,完成循环条件的查询,批量删除,批量增加,批量更新 用法 循环查询 + 批量删除 + 批量增加 + 批量更新 UsersMapper.ja ...

  9. MySQL-配置参数时 报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu......

    报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu...... 原因: 1.第一次配置参数时,不完整,出现错误!,(报错也会产生CMak ...

  10. JavaScript基础回顾知识点记录2

    js 使用嵌套for循环输出三角形 for(var i=0; i<5; i++){ //正三角 // for(var j=0; j<i+1; j++){ // document.write ...