前言
目前市面上持久层框架一般是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<BusinessInfo,String>, JpaSpecificationExecutor<BusinessInfo> {
//在这里还可以自定义方法
List<EnterpriseTInfo> findByStatus(Boolean status);
List<EnterpriseTInfo> 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<BusinessTInfo> businessTInfoPage = this.businessTInfoRepository.findAll((root,criteriaQuery,criteriaBuilder)->{
//最终的条件逻辑
Predicate finalPredicate = null;
//查询条件一
Path<String> path = root.get("userTInfo").get("phone");
finalPredicate = criteriaBuilder.equal(path, phone);
if(status != null){
//查询条件二
Path<Integer> 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<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
<S extends T> Iterable<S> saveAll(Iterable<S> var1);
Optional<T> findById(ID var1);
boolean existsById(ID var1);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable<? extends T> var1);
void deleteAll();
}
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
public interface JpaSpecificationExecutor<T> {
Optional<T> findOne(@Nullable Specification<T> var1);
List<T> findAll(@Nullable Specification<T> var1);
Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
List<T> findAll(@Nullable Specification<T> var1, Sort var2);
long count(@Nullable Specification<T> var1);
}
你的赞和关注是对我最大的肯定,希望大家多多支持,谢谢大家。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
您必须登录才能参与评论!
立即登录
大家好