Spring Data JPA - 在日期之前和之后构建查询

The*_*nty 3 java spring jpql spring-data-jpa

我是Java JPA的新手 - Spring Boot.我想创建一个JPA查找,它将计算两个日期之间的行数.

我需要得到一个数字,显示过去28天内加入的成员数量.就像10.

但也得到一个值,表明与上个月的差异 - 所以+ 4% - 或-2% - 所以我想它将是count1/count2*100 =差异.你如何检测极性 - 所以评估它的消极或正面?

目前我有这样的事情

long countByRegisteredDateAfter(Date thresholdDate) throws Exception;
Run Code Online (Sandbox Code Playgroud)

但需要一些可能更像这样的东西

long countByRegisteredBeforeDateAfter(Date thresholdDate1, Date thresholdDate2)
    throws Exception;
Run Code Online (Sandbox Code Playgroud)

也许更精细的调整这样的东西

long countByRegisteredBeforeAndDateAfterAndRole(Date thresholdDate1, Date thresholdDate2, String role)
    throws Exception;
Run Code Online (Sandbox Code Playgroud)

代码到目前为止:

            // 28 days ago
            Calendar thresholdPast28 = Calendar.getInstance();
            thresholdPast28.set(Calendar.HOUR_OF_DAY,0);
            thresholdPast28.set(Calendar.MINUTE,0);
            thresholdPast28.set(Calendar.SECOND,0);
            thresholdPast28.add(Calendar.DATE,-28);

            java.util.Date thresholdPast28Date = thresholdPast28.getTime();
            Long countLast28Days = (Long) tblLoginRepository.countByRegisteredDateAfter(thresholdPast28Date);

            System.out.println("countLast28Days " + countLast28Days);


            // 56 days ago
            Calendar thresholdPast56 = Calendar.getInstance();
            thresholdPast56.set(Calendar.HOUR_OF_DAY,0);
            thresholdPast56.set(Calendar.MINUTE,0);
            thresholdPast56.set(Calendar.SECOND,0);
            thresholdPast56.add(Calendar.DATE,-28);

            java.util.Date thresholdPast56Date = thresholdPast56.getTime();
            Long countLast56Days = (Long) tblLoginRepository.countByRegisteredDateAfter(thresholdPast56Date);

            System.out.println("countLast56Days " + countLast56Days);
Run Code Online (Sandbox Code Playgroud)

pez*_*tem 8

我有点困惑,因为主题表明你想要尝试在之前和之后找到日期,而在以后你想要它们之间.然而,在尝试之间获取日期:

long countByRegisteredDateBetween(Date thresholdDate1, Date thresholdDate2)
Run Code Online (Sandbox Code Playgroud)

或者在第二个例子中

long countByRegisteredDateBetweenAndRole(Date thresholdDate1, Date thresholdDate2, String role)
Run Code Online (Sandbox Code Playgroud)

尝试之前和之后尝试:

long countByRegisteredDateBeforeAndRegisteredDateAfter(Date thresholdDate1, Date thresholdDate2)
Run Code Online (Sandbox Code Playgroud)

与角色案例类似