直接上代码:
以查询日志表操作演示
查询日志的接口
/*******
* 日志查询的接口
* @param pageable:分页
* @param query:查询条件
* @return
*/
Page<Logs> query(Pageable pageable, LogsQuery query);
查询日志的接口实现类
@Override
public Page<Logs> query(Pageable pageable, LogsQuery query) {
/****
1.r 代表 :Root接口:代表Criteria查询的根对象,定义了实体类型,能为将来导航获得想要的结果,它与SQL查询中的FROM子句类似。,
2.q代表:q接口 代表一个specific的顶层查询对象,它包含着查询的各个部分,比如:select 、from、where、group by、order by。
3.cb :CriteriaBuilder接口:用于构造标准查询、复合条件、表达式、排序等。可以通过createQuery的方式获取CriteriaQuery实例
****/
//以下是lambda表达式
return logsRepository.findAll((r,q,cb)->{
// Predicate predicate = r.get("id").isNotNull();
//首先排除管理员的
Predicate predicate = cb.notEqual(r.get("operatorNum"), "admin");
//判断
if (StringUtils.isNotBlank(query.getStartTime())){
predicate = cb.and(cb.greaterThanOrEqualTo(r.get("createTime"),query.getStartTime()));
}
if (StringUtils.isNotBlank(query.getEndTime())){
predicate = cb.and(cb.lessThanOrEqualTo(r.get("createTime"),query.getEndTime()));
}
if (StringUtils.isNotBlank(query.getCaoZuoRenXm())){
predicate = cb.and(cb.like(r.get("operatorName"),query.getCaoZuoRenXm()));
}
predicate = cb.and(predicate, cb.equal(r.get("isDel"), 0));
q.where(predicate);
q.orderBy(cb.desc(r.get("createTime")));
return predicate;
},pageable);
}
日志查询条件类
@ApiModel("日志查询")
@Data
public class LogsQuery {
//日记开始时间
@ApiModelProperty("日志开始时间")
private String startTime;
//日记结束时间
@ApiModelProperty("日志结束时间")
private String endTime;
//姓名
@ApiModelProperty("操作人姓名")
private String caoZuoRenXm;
//证件号码
@ApiModelProperty("证件号码")
private String zhengJianHaoMa;
}
日志实体类
@ApiModel("日志")
@Entity
@Data
public class Logs extends AbstractAuditingEntity<Logs> {
//动作
@ApiModelProperty("操作")
private String operation;
//时间
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
//计算机名称
@ApiModelProperty("计算机名称")
private String computerName;
//计算机IP
@ApiModelProperty("计算机ip地址")
private String computerIp;
//操作人id
@ApiModelProperty("操作人id")
private Long operatorId;
//操作人姓名
@ApiModelProperty("操作人姓名")
@Column(name = "operatorName")
private String operatorName;
//操作人单位
@ApiModelProperty("操作人单位")
private String operatorBelong;
//内容
@ApiModelProperty("操作内容")
private String context;
在JPA的查询中,不止有这种。
例如:使用example 进行查询的
// 2.查询图片,把图片放在一个list对象中
Picture picture = new Picture();
picture.setPhotoSignature(one);
Example<Picture> example = Example.of(picture);
List<Picture> pis = pictureRepository.findAll(example);