【问题标题】:How to use ORDER BY in Spring Boot?如何在 Spring Boot 中使用 ORDER BY?
【发布时间】:2019-07-26 04:26:07
【问题描述】:

基本上我正在为学校构建一个 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、name、phone_number、getter/setter、toString。您可以在服务中看到一条评论,这正是我无法弄清楚的。当您在网站上显示表格时,@Query 需要在哪里进行订购。

Abinash Ghosh 的回答解决了一个问题。但其他人也很有帮助。 谢谢大家的帮助。

【问题讨论】:

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


    【解决方案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");
     }
    

    【讨论】:

    • 他的问题是如何“按名称排序”
    • 我已经回答了 ASC 和 DESC。请检查编辑的答案。
    【解决方案2】:

    除了 Md Shifatul Isalm 的回答之外,您还可以创建一个存储库方法,例如:

    List<Contacts> findAllOrderByNameAsc();
    

    顺便说一句,您不需要额外的 ArrayList。只需从存储库中返回值:

    return contactsRepository.findAllOrderByNameAsc();
    

    【讨论】:

      【解决方案3】:

      您可以使用JpaRepositoryOrder by 的JPA 方法命名功能

      存储库

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

      服务

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多