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. Cow Picnic S

    题目描述: K(1≤K≤100)只奶牛分散在N(1≤N≤1000)个牧场.现在她们要集中起来进餐.牧场之间有M(1≤M≤10000)条有向路连接,而且不存在起点和终点相同的有向路.她们进餐的地点必须是 ...

  2. if语句实现考试成绩划分和用if语句替换三元运算符

    语句练习 指定考试成绩,判断成绩的等级. 90-100 优秀 80-89 好 70-79 良 60-69 及格 60以下 不及格 代码: public static void main(String[ ...

  3. JAVA基础-11-Java Number 类--九五小庞

    问题:一直有疑惑,为什么java中学习了基本数据类型,而不使用,使用的是封装的对象. 解答: 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. ...

  4. RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得

    前言 前段时间写过一篇: # RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的使用心得 很多人加了我好友,说很喜欢这篇文章,也问了我一些问题. 因为最近工作比较忙, ...

  5. 【Java中的线程】java.lang.Thread 类分析

    进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...

  6. 从零开始Blazor Server(4)--登录系统

    说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...

  7. Odoo env.ref()函数

    python env.ref()函数作用是获取xml id记录. 1 action = self.env.ref('base.res_company_action').read()[0] 2 acti ...

  8. DolphinScheduler 功能开发:⼯作流级别任务空跑(后端),测试工作流是否正确执行...

    点击上方 蓝字关注我们 ✎ 编 者 按 在今年由中国科学院软件研究所主办的开源软件所供应链点亮计划-开源之夏活动中,有不少小伙伴提交了关于 DolphinScheduler 的项目,本期是来自成都信息 ...

  9. spring boot 中英文官方文档

    中文文档:http://oopsguy.com/documents/springboot-docs/1.5.4/index.html#boot-features 英文官方文档:https://docs ...

  10. flask 可插拔视图

    Flask 0.7 版本引入了可插拨视图.可插拨视图基于使用类来代替函数,其灵感来自于 Django 的通用视图.可插拨视图的主要用途是用可定制的.可插拨的视图来替代部分 实现.普通的函数视图 演示代 ...