技术标签: java mysql springboot
引入依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
DAO接口继承JpaSpecificationExecutor。
该接口允许基于JPA标准的API规范的运行。
开始构建动态where子句要实现Specification接口的
Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder cb);方法,该接口是领域驱动设计意义上的规范:
private Specification<ExportSubsidyPersonnel> getWhereClause(final long userId, final String agency, final Date startDate, final Date endDate,
final String jobLevel, final String certificateGrade, final String remark) {
return new Specification<ExportSubsidyPersonnel>() {
@Override
public Predicate toPredicate(Root<ExportSubsidyPersonnel> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.conjunction();
predicate.getExpressions().add(
criteriaBuilder.and(root.<UserInfo>get("userInfo").in(userId))
);
if (!StringUtils.isEmpty(agency)) {
predicate.getExpressions().add(
criteriaBuilder.and(root.<String>get("agency").in(agency)));
}
predicate.getExpressions().add(
criteriaBuilder.between(root.<Date>get("time"), startDate, endDate)
);
if (!StringUtils.isEmpty(jobLevel)) {
predicate.getExpressions().add(
criteriaBuilder.and(root.<String>get("jobLevel").in(jobLevel)));
}
if (!StringUtils.isEmpty(certificateGrade)) {
predicate.getExpressions().add(
criteriaBuilder.and(root.<String>get("certificateGrade").in(certificateGrade)));
}
if (!Const.UNLIMITED.equals(remark)) {
predicate.getExpressions().add(
criteriaBuilder.and(root.<String>get("remark").in(remark)));
}
return predicate;
}
};
}
CriteriaBuilder接口用来构建Predicate,而Predicate接口用来连接子句,每次添加到predicate之前都要进行参数非空判断。
其中Root接口代表where子句的引用类型,如,
root.get(“userInfo”).in(userId),其中是ExportSubsidyPersonnel持有userInfo的属性,并且注解如下:
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "userId")
private UserInfo userInfo;
in方法参数的userId即注解时的列名。相当于sql语法的in关键字。
CriteriaBuilder接口其中还包括equal等常用方法,对应sql语法的=。该接口用于构建标准查询,复合选择,表达式,谓词,排序。
最后将getWhereClause方法作为参数传入到被调用的方法中即可,如:
Page<ExportSubsidyPersonnel> exportSubsidyPersonnelPage = exportSubsidyPersonnelService
.querySubsidyPersonnelDetailed(getWhereClause(userId, agency, startDate, endDate, jobLevel,
certificateGrade, remark));
输出语句形如:
select
count(exportsubs0_.id) as col_0_0_
from
export_subsidy_personnel exportsubs0_
where
(
exportsubs0_.training_agency in (
?
)
)
and (
exportsubs0_.time between ? and ?
)
and (
exportsubs0_.remark in (
?
)
)
以上。
首先在你的ubuntu虚拟机上下载三个库,m4,libtool,jpge,已为你下载好,传送门:然后把m4库安装到你的ubuntu上面,直接./configure, make, make install即可,此处无脑操作。然后libtool,就需要交叉编译了,方法如下,注意红色部分,编译器和路径用你自己的./configure CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld --prefix=/hom...
学习强化学习《Reinforcement Learning An Introduction》,总结第二章的知识,包含一个问题,两个算法。问题:the 10-armed bandit problem算法:e-greedy、剃度上升仿真代码见附带资料:the 10-armed bandit problem1. 问题描述:the 10-armed bandit problem这是一个重复做选择...
1.我在调试程序的时候 因为之前一样的代码 不会报错这次竟然会报错了 后来发现 俩次运行的环境不一样一个我是在vscode中的 live server中运行 另一次直接偷懒了 鼠标直接点击了文件 然后就出现了这个问题这个是因为 我在一个页面中使用iframe 引进了 另一个html文件 然后直接鼠标点击打开存在iframe的那个html文件 就会出现这样错误意思是不能本地打...
1、在chrome浏览器的地址栏中输入:“chrome://settings/passwords”2、点击需要查看的密码:红圈中的图标。3、输入本机密码:”4、显示密码:
前言: 在工程有限元软件中,abaqus因为强大的软件建模与云图分析,再加上其内核语言及接口都是使用简单上手的脚本语言python进行的编写,而受到广泛的运用,但对计算输出结果数据没有提供很好的访问和处理;而MATLAB语言是一门工程数学分析计算的强大工具语言,擅长对矩阵和向量的处理而受到青睐。同时呢MATLAB在机器学习等领域也是有着得天独厚的优势。进入主题: 今天我根据自己的实际学习过
数据集合并应用场景数据集合并在日常工作经常遇到,典型的如将两次具有不同调查项目的结果进行合并,或者将不同调查员的同样调查项目的内容进行合并。例子王小呆一天被交代一项任务,将公司从不同渠道拿到的两个资料本(一个电话本,一个是其他资料,其中姓名有重叠)整理成一个电话本交给营销部以便更好推销。于是小呆打开资料本A.csv、B.csv看了内容:资料本A:姓名手机号固话张晓...
一个企业成功应用OA办公系统,离不开OA厂商和用户的共同努力。俗话说:一个良好的开头是成功的一半,在OA系统的实施中,OA系统的选择就是极其重要的“首环”。很多客户在选择OA办公系统时,因为缺乏相关的经验,就容易被厂家的宣传牵着鼻子走,在OA的选择上常常“冲动选择”,在后续的实施上会带来一定的负面影响。一款OA办公系统的成功应用,需要建立在正确的OA选型之上。接下来我们就来谈谈何为“不合理”的OA选型方式:一、选择恶意价格战的OA办公系统人们在购物的时候,总是追求“物美价廉”,我们的用户在
linux对环境变量有无双引号、或者变量用不用{}括起来并不敏感,小小的看了下profile文件,似乎系统如果发现变量没有引号,会自动加上。 但变量前必须加$符号 有以下三种添加环境变量的方法 1、直接使用export命令: 比如:export PATH=$PATH:/home/lm/apache-jena-2.7.4/binexport CLASSPATH=.:/home/liaomen
来源:AI开发者本文约为7600字,建议阅读10分钟本文给开发者提供了详细的各领域工具并整理了清单11 种极具潜力的 AI 工具类型。工欲善其事必先利其器,这也是大部分开发者在日常工作中最重要开发原则。选择与开发内容相匹配的工具,常常会使我们事半功倍。但面对人工智能的多个领域,如:机器学习、深度学习、NLP等等,多样的工具有时也让我们也无从选择。就在最近,一个基于 javascri...
maven通过命令行为SpringBoot项目打包 一、maven通过命令行打jar包进入项目目录,执行如下命令:mvn -Dmaven.test.skip -U clean package发现报如下错误:[ERROR] Failed to execute goal org.springframework.boot:spri...
x-pack是ELK的一个插件,集监控、权限、告警等于一体。支持集群级别、节点级别、索引级别的监控;支持索引、字段级别的权限控制。x-pack目前并不开源,试用期一个月。本着自用方便,尝试破解,如在生产环境下,请尊重版权,购买正版!结点规划 节点 角色 node1 master-1、x-pack node2 data-1、x-pack no...
width为宽度max-width为最大宽度如果设置了width,那宽度就定死了而设置了max-width,实际宽度可以在0~max-width之间,当元素内部宽度不足max-width时,外层元素的宽度随内层元素宽度改变何时用max-width要看需求,如果极其简单的布局width是够了