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();
});

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

最新文章

  1. Logistic回归的使用
  2. java编程
  3. MyEclipse中防止代码格式化时出现换行的情况的设置
  4. ifdown eth0 &amp;&amp; idup eth0 ifdown --exclude=l0 -a &amp;&amp; ifup --exclude=lo -a
  5. 工作流_JBPM之Helloword
  6. rsync命令(同步/备份数据)
  7. Java SSL/TLS Socket实现
  8. latch介绍
  9. Node.js:服务器与数据流
  10. 配置IIS让网站可以播放mp4文件
  11. BFS+数据处理 Under the Trees UVa
  12. Vs自定义设置
  13. Jmeter-----【mac电脑】配置web浏览器的代理抓取请求
  14. java split(regex,limit) 使用记录
  15. [原创]Burp Suite web应用程序渗透测试神器
  16. Leetcode 242.有效的字母异位词 By Python
  17. [No0000135]程序员修炼之道 Tips
  18. 《剑指Offer 1.二维数组中的查找》2019-03-25
  19. Java内存模型解惑--观深入理解Java内存模型系列文章有感(二)
  20. Python对excel表格的操作.

热门文章

  1. FPGA开发流程(创建工程,选择芯片,变量位置,文件命名,reg和wire数据类型,开发流程)
  2. python操作ini文件
  3. 使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练
  4. 让 DolphinScheduler 1.3.4 开启 Netty 日志打印,解决流程实例一直在运行中的问题
  5. ByteBuffer数据结构
  6. React报错之React hook &#39;useState&#39; cannot be called in a class component
  7. 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考
  8. 算法模板:spfa
  9. 回溯、贪心、DP的区别和联系
  10. 第五十三篇:Vue安装Element ui