前幾天寫了一篇關於介紹SpringBoot的簡單使用。以及使用SpringBoot JPA做了一次資料庫的一個CURD (地址:http://blog.csdn.net/canot/article/details/51449589)這篇檔案簡單學習Spring Boot JPA 或者說是Spring Data對現在很流行的一個nosql產品MongoDB的簡單操作(主要針對在分頁查詢上)。
於前面SpringBoot的HelloWorld類似,在匯入必要的核心包之後,為了正常驅動MongoDB還需要額外的包(MongoDB驅動包):
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.2.2</version> </dependency>
在之前的Spring Boot的示範中,為了使得項目能夠正確的驅動資料庫。必須在項目的根目錄下增加了一個設定檔:application.properties.該設定檔寫入了資料庫的資訊,如操作哪個資料庫,帳號密碼等等。在操作MongoDB中這個檔案不是必須的了。當你的資料庫沒有設定帳號密碼時,當你要操作的集合位於資料庫test中時,這個設定檔可以省掉。當如果不是上述的情況那麼一定需要該設定檔:
spring.data.mongodb.database: ticketspring.data.mongodb.uri: mongodb://localhost:27017//xxxx
Dao介面:
@Repositorypublic interface CustomerDao extends PagingAndSortingRepository<Customer,String>{}
實體類:
//指定對應於集合customer@Document(collection = "customer")public class Customer {//主鍵 @Id private String _id; private String name; private String phone; private String gender; private String birthday; private String passport;//xxxx}
Controller層:
@AutowiredCustomerDao customerDao;//完成分頁請求@RequestMapping("/selectName") public List<Customer> selectName(@RequestParam("id") int id){ //構建分頁資訊 PageRequest pageRequest = buildPageRequest(id,5,null); //查詢指定分頁的內容 Iterator<Customer> customers = customerDao.findAll(pageRequest).iterator(); List<Customer> lists = new ArrayList<Customer>(); while(customers.hasNext()){ lists.add(customers.next()); } return lists; } /** * * 建立分頁請求. */ private PageRequest buildPageRequest(int pageNumber, int pageSize,String sortType) { Sort sort = null; if ("auto".equals(sortType)) { sort = new Sort(Direction.DESC, "id"); } else if ("birthday".equals(sortType)) { sort = new Sort(Direction.ASC, "birthday"); } //參數1表示當前第幾頁,參數2表示每頁的大小,參數3表示排序 return new PageRequest(pageNumber-1,pageSize,sort); }
Spring Boot 或者Spring data提供給我們的介面形式來幫我們來完成對於表的CRUR操作。那麼我們了來思考怎麼實現對於某個欄位的查詢,在以前我們自己手寫的DAO中我們通過編寫一個findByxxx來實現,在Spring Boot或者說Spring Data中它也為我們提供了這種方法,並且我們也只需要寫在介面中,而不需要實作類別,它就能幫我們實現。
查詢所有性別為男,並按生日排序
@Repositorypublic interface CustomerDao extends PagingAndSortingRepository<Customer,String>{//這個方法名不能亂寫,findByXXX,那麼對於的類中必須有XXX欄位。也就是說對應的資料庫中一定要存在XXX欄位對應的列 public Page<Customer> findBygender(String gender,Pageable pageable);}
這裡注意一點,雖然我們在調用Repository方法中的分頁查詢時,傳入的參數是PageRequest。但一定要在Repository定義該方法時參數定義為Pageable。否則會報錯:Paging query needs to have a Pageable parameter
Controller:
@RequestMapping("/selectBygender") public Page<Customer> getBygender(String gender,@RequestParam("pageNumber") int pageNumber){ //構建分頁資訊 PageRequest pageRequest = buildPageRequest(pageNumber,5,"birthday");Page<Customer> customera = customerDao.findBygender(gender,pageRequest); return customers; }