Как использовать ORDER BY в Spring Boot? - PullRequest
0 голосов
/ 04 марта 2019

В основном я создаю веб-приложение для школы и использую Telegram Bot API для отправки сообщений моим контактам.На левой стороне моей веб-страницы у меня есть контакты div и список всех контактов из таблицы в MySQL.Все работает отлично, за исключением того, что они не упорядочены по имени.

Контроллер

@Controller
public class MainController {

@Autowired
private ContactsService contactsService;

@GetMapping("/")
public String allContacts(HttpServletRequest request) {
    request.setAttribute("contacts", contactsService.findAll());
    request.setAttribute("mode", "MODE_CONTACTS");
    return "index";
}

@RequestMapping("/input")
public String input() {
    return("input");
}
}

Репозиторий

import org.springframework.data.repository.CrudRepository;
import totelegram.model.Contacts;
public interface ContactsRepository extends CrudRepository<Contacts, Integer>{
}

Сервис

@Service
@Transactional
public class ContactsService {

private final ContactsRepository contactsRepository;

public ContactsService(ContactsRepository contactsRepository) {
    super();
    this.contactsRepository = contactsRepository;
}

//@Query("select * from contacts order by name asc")
public List<Contacts> findAll(){
    List<Contacts> contacts = new ArrayList<>();
    for(Contacts contact : contactsRepository.findAll()) {
        contacts.add(contact);
    }
    return contacts;
}
}

Модель

@Entity(name = "contacts")
public class Contacts implements Serializable{

И в принципе это простоимеет идентификатор, имя, номер телефона, getters / setters, toString.В Сервисе вы можете увидеть один комментарий, который я не могу понять.Где должен быть @Query, когда вы отображаете таблицу на веб-сайте, вы заказываете их.

Ответ от Абинаша Гоша решил проблему.Но и другие были полезны.Спасибо всем за помощь.

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

В дополнение к ответу от Md Shifatul Isalm вы также можете создать метод Repository вроде:

List<Contacts> findAllOrderByNameAsc();

Кстати, вам не нужен дополнительный ArrayList.Просто верните значения из репозитория:

return contactsRepository.findAllOrderByNameAsc();
0 голосов
/ 04 марта 2019

Вы можете использовать JpaRepository и функцию именования методов JPA для Order by

Репозиторий

public interface ContactsRepository extends JpaRepository<Contacts, Integer> {
    public List<Contacts> findAllByOrderByNameAsc();
}

Сервис

public List<Contacts> findAll(){
    List<Contacts> contacts = contactsRepository.findAllByOrderByNameAsc();
    return contacts;
}
0 голосов
/ 04 марта 2019

Попробуйте следующий код для заказа.Вы можете сделать для asc Sort.Direction.ASC , а также изменить имя поля в соответствии с необходимостью.Я использовал «id» здесь.Это должно работать нормально.

public List<Contacts> findAll(){
    List<Contacts> contacts = new ArrayList<>();
    for(Contacts contact : contactsRepository.findAll(sortByIdDesc())) {
        contacts.add(contact);
    }
    return contacts;
}

 private Sort sortByIdDesc() {
        return new Sort(Sort.Direction.DESC, "id");
 }

Для вашей проблемы, решение:

public List<Contacts> findAll(){
    List<Contacts> contacts = new ArrayList<>();
    for(Contacts contact : contactsRepository.findAll(sortByNameAsc())) {
        contacts.add(contact);
    }
    return contacts;
}

 private Sort sortByNameAsc() {
        return new Sort(Sort.Direction.ASC, "name");
 }
...