前段时间用spring mvc, spring data mongo, 做了一个集成的例子,唯一美中不足的是没有分页实现,作为实际的例子还是有所欠缺的,参考了网上其他一些文章,整理出了下面这个例子, 主要功能如下: 1.封装了MongoDB 增删改查的基类 2.定义分页实现 程序运行的效果如下, 本文最后提供源代码下载 封装了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> { /** * 通过条件查询,查询分页结果 * * @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相当于从那条记录开始 query.limit(pageSize);// 从skip开始,取多少条记录 List<T> datas = this.find(query); page.setDatas(datas); return page; } /** * 通过条件查询实体(集合) * * @param query */ public List<T> find(Query query) { return mongoTemplate.find(query, this.getEntityClass()); } /** * 通过一定的条件查询一个实体 * * @param query * @return */ public T findOne(Query query) { return mongoTemplate.findOne(query, this.getEntityClass()); } /** * 查询出所有数据 * * @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()); } /** * 通过条件查询更新数据 * * @param query * @param update * @return */ public void updateFirst(Query query, Update update) { mongoTemplate.updateFirst(query, update, this.getEntityClass()); } /** * 保存一个对象到mongodb * * @param bean * @return */ public T save(T bean) { mongoTemplate.save(bean); return bean; } /** * 通过ID获取记录 * * @param id * @return */ public T findById(String id) { return mongoTemplate.findById(id, this.getEntityClass()); } /** * 通过ID获取记录,并且指定了集合名(表的意思) * * @param id * @param collectionName * 集合名 * @return */ public T findById(String id, String collectionName) { return mongoTemplate.findById(id, this.getEntityClass(), collectionName); } /** * 获取需要操作的实体类class * * @return */ protected abstract Class<T> getEntityClass(); /** * 注入mongodbTemplate * * @param mongoTemplate */ protected abstract void setMongoTemplate(MongoTemplate mongoTemplate); /** * spring mongodb 集成操作类 */ protected MongoTemplate mongoTemplate; } 2. 2.定义分页实现 程序代码 package com.mon.page; import java.util.List; public class Pagination<T> { /** * 一页数据默认20条 */ private int pageSize = 20; /** * 当前页码 */ private int pageNo; /** * 上一页 */ private int upPage; /** * 下一页 */ private int nextPage; /** * 一共有多少条数据 */ private long totalCount; /** * 一共有多少页 */ private int totalPage; /** * 数据集合 */ private List<T> datas; /** * 分页的url */ private String pageUrl; /** * 获取第一条记录位置 * * @return */ public int getFirstResult() { return (this.getPageNo() - 1) * this.getPageSize(); } /** * 获取最后记录位置 * * @return */ public int getLastResult() { return this.getPageNo() * this.getPageSize(); } /** * 计算一共多少页 */ public void setTotalPage() { this.totalPage = (int) ((this.totalCount % this.pageSize > 0) ? (this.totalCount / this.pageSize + 1) : this.totalCount / this.pageSize); } /** * 设置 上一页 */ public void setUpPage() { this.upPage = (this.pageNo > 1) ? this.pageNo - 1 : this.pageNo; } /** * 设置下一页 */ 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(); } /** * 初始化计算分页 */ private void init() { this.setTotalPage();// 设置一共页数 this.setUpPage();// 设置上一页 this.setNextPage();// 设置下一页 } } 配置MongodbTemplate 来操作数据库 这是在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> 运行程序,首先生成几百条数据,然后在测试分页 : 启动芒果数据库,然后在shell 中查看数据. 剩下的配置,都在源代码中,可以参考源代码, 源代码所需要的 jar 包,如同这里一样: Spring MVC 与 MongoDB 结合例子 程序代码下载: spring mvc mongodb pagination sample download 除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
|
|