前言
现在市面上持久层框架一般是mybatis,hibernate等,这篇文章来说说jpa。jpa采用Hibernate框架作为底层实现,并对其加以封装。jpa相对于hibernate使用起来较简单。
使用步骤如下
使用注解的形式创建实体类
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class BusinessTInfo {
@Id
private String id;
@NotBlank(message = "内容不可为空")
@Size(min = 1,max = 250,message = "内容在1-200个字之间")
private String content;
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;
@Temporal(TemporalType.TIMESTAMP)
private Date updateTime;
@ManyToOne
private UserTInfo userTInfo;
@ManyToOne
private EnterpriseTInfo enterpriseTInfo;
private Integer status;
}
创建dao接口
注意主要继承如下两个接口,这两个接口中有基本的增删改查方法还有复杂的查询方法,日常使用足够,当然也可以在里边自定义方法。
public interface BusinessTInfoRepository extends JpaRepository, JpaSpecificationExecutor {
//在这里还可以自定义方法
List findByStatus(Boolean status);
List findByName(String name);
}
使用
添加
this.businessTInfoRepository.save(businessTInfo);
删除(增改同样使用)
this.businessTInfoRepository.delete(businessTInfo);
查询
public OfferTResult findByPhone(String phone, int pageNo, int pageSize, String searchKey,Integer status) {
Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
Pageable pageable = PageRequest.of(pageNo, pageSize,sort);
;
Page businessTInfoPage = this.businessTInfoRepository.findAll((root,criteriaQuery,criteriaBuilder)->{
//最终的条件逻辑
Predicate finalPredicate = null;
//查询条件一
Path path = root.get("userTInfo").get("phone");
finalPredicate = criteriaBuilder.equal(path, phone);
if(status != null){
//查询条件二
Path statusPath = root.get("status");
Predicate statusPredicate = criteriaBuilder.equal(statusPath, status);
finalPredicate = criteriaBuilder.and(finalPredicate,statusPredicate);
}
if(StringUtils.isNotBlank(searchKey)){
//查询条件三
String likeSearchKey = "%"+searchKey+"%";
Predicate varietiesName = criteriaBuilder.like(root.join("enterpriseTInfo").join("enterpriseVarietiesTSet").get("varieties").get("name"), likeSearchKey);
Predicate contentLike = criteriaBuilder.like(root.get("content"),likeSearchKey);
Predicate searchKeyPredicate = criteriaBuilder.or(varietiesName,contentLike);
finalPredicate = criteriaBuilder.and(finalPredicate,searchKeyPredicate);
}
return finalPredicate;
},pageable);
return OfferResult.success(businessTInfoPage );
}
根据主键查询
businessTInfoRepository.findById(id)
其他方法
public interface CrudRepository extends Repository {
S save(S var1);
Iterable saveAll(Iterable var1);
Optional findById(ID var1);
boolean existsById(ID var1);
Iterable findAll();
Iterable findAllById(Iterable var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable extends T> var1);
void deleteAll();
}
public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor {
List findAll();
List findAll(Sort var1);
List findAllById(Iterable var1);
List saveAll(Iterable var1);
void flush();
S saveAndFlush(S var1);
void deleteInBatch(Iterable var1);
void deleteAllInBatch();
T getOne(ID var1);
List findAll(Example var1);
List findAll(Example var1, Sort var2);
}
public interface JpaSpecificationExecutor {
Optional findOne(@Nullable Specification var1);
List findAll(@Nullable Specification var1);
Page findAll(@Nullable Specification var1, Pageable var2);
List findAll(@Nullable Specification var1, Sort var2);
long count(@Nullable Specification var1);
}
你的赞和关注是对我最大的肯定,希望大家多多支持,谢谢大家。