SpringDataJpa时间查询,是使用between

需求:前端调用后端接口,传递一个 personnelId和date  ; 重点就是 getTime()  方法  ;就是 不管是什么形式的日期时间,都可以 通过 getTime() 方法 转为毫秒 形式,再转化为其他 需要的 日期时间形式

DTO :

/**
 * 用于 通过 personnelId和 workDay指定某一天的日期 去查询 某一天的工时日报
 */
public class FindOneWorkHourDTO {

    private String personnelId;
    private String workDay;}
控制层:重点是@RequestBody 是传入一个DTO
@PostMapping("getProjectWorkHourByPersonnelIdAndDate")
    public ProjectWorkHourDTO getProjectWorkHourByPersonnelIdAndDate(@RequestBody FindOneWorkHourDTO findOneWorkHourDTO){return ....}

业务层:(业务层接口这里省略不写)

总的思路范围就是 查询 第一天零点 到 第二天零点   

这里写两个SimpleDateFormat的意义是 :先用 sdf : 转换前端传来的8位数字符串,再 用 fm 转为标准的 对应 数据库的字段

前提知识:jdk  (date包)中的 parse   方法原型:public Date parse(String source){.....}  
                 jdk  (date包)中的 format 方法原型:public final String format (Object obj){.........}
 1、sdf.parse(dateString) 将前端 字符串 格式化 ; 
 2、sdf.parse(dateString).getTime()) 将其转换为毫秒形式,此时整个数据的返回值是Long型,但是
 3、fm.format(sdf.parse(dateString).getTime())  将其 转为 转为 fm 格式的字符串 ,为等会儿 转化为  Date 格式 做准备
 4、fm.parse(fm.format(sdf.parse(dateString).getTime()))   将上面的 转为 Date格式,    
 parse 返回日期型(Date) ;format:返回字符串型 ;getTime :返回 Long型 即转化为毫秒;86400000就是一天24小时的毫秒形式

@Override
    public ProjectWorkHourDTO getProjectWorkHourByPersonnelIdAndDate(FindOneWorkHourDTO findOneWorkHourDTO) {
               String dateString=findOneWorkHourDTO.getWorkDay();//前端传来的值是 例如:20180512
               SimpleDateFormat fm=new SimpleDateFormat("yyyyMMdd HH:mm:ss");
               SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");   
             try{ 
                     Date date1=fm.parse(fm.format(sdf.parse(dateString).getTime()));
                     Date date2=fm.parse(fm.format(sdf.parse(dateString).getTime()+86400000));
           	     ProjectWorkHourDO projectWorkHourDO=projectWorkHourDao.findOne((root, criteriaQuery, criteriaBuilder) -> {
            	     Path delete=root.get("deleted");
           	     Path personnelIdPath=root.get("personnelId");
            	     Path datePath=root.get("workDay");
            return criteriaBuilder.and(
                    criteriaBuilder.equal(delete,false),
                    criteriaBuilder.equal(personnelIdPath,findOneWorkHourDTO.getPersonnelId()),
                    criteriaBuilder.between(root.get("workDay"),date1,date2)
            );
        });
       	   ProjectWorkHourDTO projectWorkHourDTO=projectWorkHourMapper.from(projectWorkHourDO);
        	   return projectWorkHourDTO;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }



你可能感兴趣的:(SpringDataJpa,springdatajpa)