SpringData拓展Repository

前言

  • JPA中 @Query 注解中要对JPQL进行拼装; 而注解上的字符串是无法使用静态常量的;
  • JPA中继承 JpaSpecificationExecutor 可以满足复杂查询条件的拼装,但是对复杂的更新,删除等操作,就显得无能无力了
  • 故SpringData官方支持对Repository进行拓展,从而满足日益复杂的需求

拓展流程

  1. 首先需要自定义一个接口; 命名规范没有固定的要求,但是还是推荐以 ...CustomRepository 来进行命名,在代码层级上结构更为清晰

  2. 你所使用SpringData 的 ...Repository 需要继承你自定义的接口 ...CustomRepository

  3. 这里要格外注意, 你不需要对 ...CustomRepository 来构造实现类,而是要构造一个 ...Repository 的实现类! 并且命名格式 必须为 ...RepositoryImpl. 推荐实现类和repository在同一级目录下,因为实现类是不需要任何Spring的注解来将它放置到容器中的,只要命名规范,Spring会自动将该实现类注入到IOC容器中

  4. ...CustomRepository 接口中定义一些你需要用到的复杂接口,或者SpringData的Repository无法满足的,并在 ...RepositoryImpl 实现类中实现它

  5. 最后调用的时候,你只需要在Service层暴露出 ...Repository 即可,不仅可以使用SpringData原生功能,也可以调用你自定义的Repository的方法

案例DEMO (Assistance业务为例)

  1. 一个业务repository; 它继承了自定义的AssistanceCustomRepository 接口
  public interface AssistanceRepository extends JpaRepository<Assistance, Long>,
        JpaSpecificationExecutor<Assistance>, AssistanceCustomRepository {
   
    int countByAssTypeAndAssState(String assType, Integer assState);

    Assistance findByAssGuid(String assGuid);

  }
  1. 拓展自定义repository
  /**
   * 自定义写Assistance Repository; 满足原生repository JPQL无法拼接等复杂功能
   */
  public interface AssistanceCustomRepository {

    int passApprove(String assGuid, String urEmpName);
  }
  1. 业务repository的实现类
  public class AssistanceRepositoryImpl implements AssistanceCustomRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @Transactional(rollbackFor = {Exception.class})
    @Override
    public int passApprove(String assGuid, String urEmpName) {
        //TODO
        ...
    }
  }
  1. 在service层只需要暴露 assistanceRepository就可以调用 ssistanceCustomRepository中的方法与SpringData自己的方法
  @Service
  public class AssistanceService {
    @Autowired
    private AssistanceRepository assistanceRepository;

    public void passApprove(String assGuid){
       //注意:这里调用的是拓展repository中的方法
        assistanceRepository.passApprove(assGuid, null);
    }
  }
  1. 最后贴上 repository的项目结构

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值