前段時(shí)間用spring mvc, spring data mongo, 做了一個(gè)集成的例子,唯一美中不足的是沒有分頁(yè)實(shí)現(xiàn),作為實(shí)際的例子還是有所欠缺的,參考了網(wǎng)上其他一些文章,整理出了下面這個(gè)例子, 主要功能如下: 1.封裝了MongoDB 增刪改查的基類 2.定義分頁(yè)實(shí)現(xiàn) 程序運(yùn)行的效果如下, 本文最后提供源代碼下載 封裝了MongoDB 增刪改查的基類 程序代碼 package com.mon.mongodb; import java.util.List; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import com.mon.page.Pagination; public abstract class MongodbBaseDao<T> { /** * 通過(guò)條件查詢,查詢分頁(yè)結(jié)果 * * @param pageNo * @param pageSize * @param query * @return */ public Pagination<T> getPage(int pageNo, int pageSize, Query query) { long totalCount = this.mongoTemplate.count(query, this.getEntityClass()); Pagination<T> page = new Pagination<T>(pageNo, pageSize, totalCount); query.skip(page.getFirstResult());// skip相當(dāng)于從那條記錄開始 query.limit(pageSize);// 從skip開始,取多少條記錄 List<T> datas = this.find(query); page.setDatas(datas); return page; } /** * 通過(guò)條件查詢實(shí)體(集合) * * @param query */ public List<T> find(Query query) { return mongoTemplate.find(query, this.getEntityClass()); } /** * 通過(guò)一定的條件查詢一個(gè)實(shí)體 * * @param query * @return */ public T findOne(Query query) { return mongoTemplate.findOne(query, this.getEntityClass()); } /** * 查詢出所有數(shù)據(jù) * * @return */ public List<T> findAll() { return this.mongoTemplate.findAll(getEntityClass()); } /** * 查詢并且修改記錄 * * @param query * @param update * @return */ public T findAndModify(Query query, Update update) { return this.mongoTemplate.findAndModify(query, update, this.getEntityClass()); } /** * 按條件查詢,并且刪除記錄 * * @param query * @return */ public T findAndRemove(Query query) { return this.mongoTemplate.findAndRemove(query, this.getEntityClass()); } /** * 通過(guò)條件查詢更新數(shù)據(jù) * * @param query * @param update * @return */ public void updateFirst(Query query, Update update) { mongoTemplate.updateFirst(query, update, this.getEntityClass()); } /** * 保存一個(gè)對(duì)象到mongodb * * @param bean * @return */ public T save(T bean) { mongoTemplate.save(bean); return bean; } /** * 通過(guò)ID獲取記錄 * * @param id * @return */ public T findById(String id) { return mongoTemplate.findById(id, this.getEntityClass()); } /** * 通過(guò)ID獲取記錄,并且指定了集合名(表的意思) * * @param id * @param collectionName * 集合名 * @return */ public T findById(String id, String collectionName) { return mongoTemplate.findById(id, this.getEntityClass(), collectionName); } /** * 獲取需要操作的實(shí)體類class * * @return */ protected abstract Class<T> getEntityClass(); /** * 注入mongodbTemplate * * @param mongoTemplate */ protected abstract void setMongoTemplate(MongoTemplate mongoTemplate); /** * spring mongodb 集成操作類 */ protected MongoTemplate mongoTemplate; } 2. 2.定義分頁(yè)實(shí)現(xiàn) 程序代碼 package com.mon.page; import java.util.List; public class Pagination<T> { /** * 一頁(yè)數(shù)據(jù)默認(rèn)20條 */ private int pageSize = 20; /** * 當(dāng)前頁(yè)碼 */ private int pageNo; /** * 上一頁(yè) */ private int upPage; /** * 下一頁(yè) */ private int nextPage; /** * 一共有多少條數(shù)據(jù) */ private long totalCount; /** * 一共有多少頁(yè) */ private int totalPage; /** * 數(shù)據(jù)集合 */ private List<T> datas; /** * 分頁(yè)的url */ private String pageUrl; /** * 獲取第一條記錄位置 * * @return */ public int getFirstResult() { return (this.getPageNo() - 1) * this.getPageSize(); } /** * 獲取最后記錄位置 * * @return */ public int getLastResult() { return this.getPageNo() * this.getPageSize(); } /** * 計(jì)算一共多少頁(yè) */ public void setTotalPage() { this.totalPage = (int) ((this.totalCount % this.pageSize > 0) ? (this.totalCount / this.pageSize + 1) : this.totalCount / this.pageSize); } /** * 設(shè)置 上一頁(yè) */ public void setUpPage() { this.upPage = (this.pageNo > 1) ? this.pageNo - 1 : this.pageNo; } /** * 設(shè)置下一頁(yè) */ public void setNextPage() { this.nextPage = (this.pageNo == this.totalPage) ? this.pageNo : this.pageNo + 1; } public int getNextPage() { return nextPage; } public int getTotalPage() { return totalPage; } public int getUpPage() { return upPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public long getTotalCount() { return totalCount; } public void setTotalCount(long totalCount2) { this.totalCount = totalCount2; } public List<T> getDatas() { return datas; } public void setDatas(List<T> datas) { this.datas = datas; } public String getPageUrl() { return pageUrl; } public void setPageUrl(String pageUrl) { this.pageUrl = pageUrl; } public Pagination(int pageNo, int pageSize, long totalCount2) { this.setPageNo(pageNo); this.setPageSize(pageSize); this.setTotalCount(totalCount2); this.init(); } /** * 初始化計(jì)算分頁(yè) */ private void init() { this.setTotalPage();// 設(shè)置一共頁(yè)數(shù) this.setUpPage();// 設(shè)置上一頁(yè) this.setNextPage();// 設(shè)置下一頁(yè) } } 配置MongodbTemplate 來(lái)操作數(shù)據(jù)庫(kù) 這是在spring 的配置文件中配置的 程序代碼 <mongo:mongo host="localhost" port="27017"/> <!-- Offers convenience methods and automatic mapping between MongoDB JSON documents and your domain classes. --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo"/> <constructor-arg name="databaseName" value="yihaomen"/> </bean> 運(yùn)行程序,首先生成幾百條數(shù)據(jù),然后在測(cè)試分頁(yè) : 啟動(dòng)芒果數(shù)據(jù)庫(kù),然后在shell 中查看數(shù)據(jù). 剩下的配置,都在源代碼中,可以參考源代碼, 源代碼所需要的 jar 包,如同這里一樣: Spring MVC 與 MongoDB 結(jié)合例子 程序代碼下載: spring mvc mongodb pagination sample download 除非申明,文章均為一號(hào)門原創(chuàng),轉(zhuǎn)載請(qǐng)注明本文地址,謝謝!
|
|
來(lái)自: IT技術(shù)武館 > 《JavaWeb》