springboot使用jpa

前言

目前市面上持久层框架一般是mybatis,hibernate等,这篇文章来说说jpa。jpa采用Hibernate框架作为底层实现,并对其加以封装。jpa相对于hibernate使用起来较简单。

使用步骤如下

使用注解的形式创建实体类

springboot使用jpa

@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)

其他方法

springboot使用jpa

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

你的赞和关注是对我最大的肯定,希望大家多多支持,谢谢大家。

© 版权声明

相关文章

1 条评论

您必须登录才能参与评论!
立即登录