Получение данных из MySQL базы данных, отфильтрованных по дате с помощью Spring загрузки - PullRequest
0 голосов
/ 26 мая 2020

У меня есть таблица take_coffee, и я хочу отфильтровать данные по дате. Мне нужно получить данные за последнюю неделю, месяц и год. Данные относятся к принятому кофе, поэтому у них есть идентификатор, дата и тег. Как мне сделать фильтрацию? Мне нужно что-то вроде запроса с WHERE date> (сегодня-7), сегодня-30 или сегодня-365. Спасибо. Вот мой код, но он работает некорректно. Сущность

 @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "take_coffee")
    public class Coffee {

        @Id
        @GeneratedValue
        private int id;

        @JsonFormat(pattern = "yyyy-MM-dd")
        private Date date;
        private String tag;

    }

Репозиторий

public interface CoffeeRepository extends JpaRepository<Coffee, Integer> {
    List<Coffee> findAllByDateBetween(Date today, Date days);
}

Служба

@Service
public class CoffeeService {

    @Autowired
    private CoffeeRepository repository;


    public Coffee takeCoffee(Coffee coffee){
        return repository.save(coffee);
    }

    public List<Coffee> getAllCoffee(){
        return repository.findAll();
    }

    public Coffee getCoffeeById(int id){
        return repository.findById(id).orElse(null);
    }

    public String deleteCoffeeById(int id){
        repository.deleteById(id);
        return "deleted coffee " + id;
    }

    public Coffee updateCoffee(Coffee coffee){
        Coffee existingcoffee = repository.findById(coffee.getId()).orElse(null);
        existingcoffee.setDate(coffee.getDate());
        existingcoffee.setTag(coffee.getTag());
        return repository.save(existingcoffee);
    }

    public List<Coffee> findAllByDateBetween(int days){
        Calendar calendar = Calendar.getInstance();
        Date today = calendar.getTime();

        calendar.add(Calendar.DAY_OF_MONTH, -days);
        Date beforeDays = calendar.getTime();
        return repository.findAllByDateBetween(today, beforeDays);
    }
}

Контроллер - причина перекрестного происхождения ReactApp

@CrossOrigin(origins = "http://localhost:3000")
@RestController
public class CoffeeController {

    @Autowired
    private CoffeeService service;

    @PostMapping("/takeCoffee")
    public Coffee takeCaffee (@RequestBody Coffee caffee){
        return service.takeCoffee(caffee);
    }

    @GetMapping("/getCoffee")
    public List<Coffee> getAllUsers(){
        return service.getAllCoffee();
    }

    @GetMapping("/coffee/{id}")
    public Coffee getCaffeeById(@PathVariable int id){
        return service.getCoffeeById(id);
    }

    @GetMapping("/coffee/stats/{days}")
    public List<Coffee> findAllByDateBetween(@PathVariable int days){
        return service.findAllByDateBetween(days);
    }

    @PutMapping("/updateCoffee")
    public Coffee updateCoffee (@RequestBody Coffee caffee){
        return service.updateCoffee(caffee);
    }

    @DeleteMapping("/deleteCoffee/{id}")
    public String deleteCoffeeById (@PathVariable int id){
        return service.deleteCoffeeById(id);
    }


}

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Имя вашего метода кажется неправильным. Если мой разум работает прямо сейчас, у вас должно быть:

List<Coffee> findAllByDateLessThanAndDateGreaterThan(Date today, Date days);
0 голосов
/ 26 мая 2020

Просто поменяйте местами параметры today и beforeDays, чтобы они были похожи на

return repository.findAllByDateBetween(beforeDays, today);

Потому что beforeDays <сегодня согласно вашим расчетам, и более ранняя дата должна быть сначала передана в <code>between.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...