账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    CrudRepository建查询,And和Between得不到正确的结果
    27
    0

    做一个应用查数据库,用了spring-boot的CrudRepository,想查询一个时间段里的数据

    查询一个时间之后,方法返回的结果正常
    List<T> findByTimestampAfter(@Param("timestamp") Date start)

    查询一个时间之前,方法返回的结果也正常
    List<T> findByTimestampBefore(@Param("timestamp") Date end)

    但是我试了下面三种方法都不行:

    List<T> findByTimestampBetween(@Param("timestamp") Date start,@Param("timestamp") Date end)

    List<T> findByTimestampAfterAndTimestampBefore(@Param("timestamp") Date start,@Param("timestamp") Date end)

    List<T> findByTimestampGreaterThanEqualAndTimestampLessThanEqual(@Param("timestamp") Date start,@Param("timestamp") Date end)

    返回的结果是timestamp正好等于end的一条数据,而中间应该有100多条数据

    反复看文档,还是认为代码没写错

    在数据库直接select * from exchange where timestamp > "2018-01-02 17:30:00" AND timestamp < "2018-01-02 17:48:00"; 结果也是正确的

    真是奇怪了。。。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 笑望红尘 普通会员 1楼

      在使用CRUDRepository时,And和Between的操作符可能会得到错误的结果。这是因为它们分别用于判断多个条件是否满足,而在大多数数据库系统中,我们通常需要的是匹配多个条件的条件。

      以下是一个使用And操作符的例子:

      java List<User> users = userRepository.findAll();

      在这个例子中,User类有两个字段:id和name。我们想要找到所有id为1和2的用户,因此我们可以使用And操作符来判断id是否为1和2:

      java List<User> users = userRepository.findAll();

      如果我们想要找到所有name为"John"和"Jane"的用户,我们可以使用And操作符:

      java List<User> users = userRepository.findAll();

      如果我们想要找到所有id为1和2,且name为"John"的用户,我们可以使用And操作符和Between操作符:

      java List<User> users = userRepository.findAll();

      如果我们在查询中使用了Between操作符,那么我们可能需要指定一个最小值和最大值。例如:

      java List<User> users = userRepository.findAll();

      如果我们想要找到id在1到5之间的所有用户,我们可以使用以下查询:

      java List<User> users = userRepository.findAll();

      如果我们想要找到id在1和5,且name为"John"的用户,我们可以使用以下查询:

      java List<User> users = userRepository.findAll();

      需要注意的是,不同的数据库系统可能有不同的操作符和语法,因此在使用CRUDRepository时,你需要根据你的数据库系统来选择正确的操作符和语法。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部