如何在Spring Boot中使用ORDER BY?

时间:2019-03-04 19:34:43

标签: java mysql spring spring-data-jpa spring-data

基本上,我正在为学校构建一个Web应用程序,并使用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{

基本上,它只有id,名称,电话号码,getters / setters和toString。您可以在Service中看到一条评论,而这正是我无法弄清楚的。 @Query的位置,以便在网站上显示表格时将其订购。

来自Abinash Ghosh的答案解决了一个问题。但是其他人也有帮助。 谢谢大家的帮助。

3 个答案:

答案 0 :(得分:1)

尝试以下代码进行desc order。 您可以通过 Sort.Direction.ASC 为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");
 }

答案 1 :(得分:0)

除了Md Shifatul Isalm的答案,您还可以创建一个Repository方法,例如:

List<Contacts> findAllOrderByNameAsc();

此外,您不需要其他ArrayList。只需从存储库中返回值:

return contactsRepository.findAllOrderByNameAsc();

答案 2 :(得分:0)

您可以为JpaRepository使用Order by和JPA方法命名功能

存储库

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

服务

public List<Contacts> findAll(){
    List<Contacts> contacts = contactsRepository.findAllByOrderByNameAsc();
    return contacts;
}