你看我有一篇文章配置,或许还会有。mongodb性能测试结果。一个“快”字

源代码包,请留下邮箱

代码结构图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaDM0ODU5MjUzMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

直接上代码

BaseDao.java

package com.yiyuwanglu.basecore.dao;

import java.util.List;

public interface BaseDao {

	<T> T findById(Class<T> entityClass, String id);

	<T> List<T> findAll(Class<T> entityClass);

	void remove(Object obj);

	void add(Object obj);

	void saveOrUpdate(Object obj);
}

MongoDBBaseDao.java

package com.yiyuwanglu.basecore.dao.mongodb;

import java.util.Collection;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository; import com.yiyuwanglu.basecore.dao.BaseDao;
import com.yiyuwanglu.basecore.page.Page; /**
* mongodb数据泛型dao类
*
* @author hjn
* @version 1.0 2014-09-16
*/
@Repository(value = "mongoDBBaseDao")
public class MongoDBBaseDao implements BaseDao {
@Autowired
@Qualifier("mongoTemplate")
protected MongoTemplate mongoTemplate; /**
* 依据主键id返回对象
*
* @param id
* 唯一标识
* @return T 对象
*/
public <T> T findById(Class<T> entityClass, String id) {
return this.mongoTemplate.findById(id, entityClass);
} /**
* 依据类获取所有的对象列表
*
* @param entityClass
* 返回类型
* @return List<T> 返回对象列表
*/
public <T> List<T> findAll(Class<T> entityClass) {
return this.mongoTemplate.findAll(entityClass);
} /**
* 删除一个对象
*
* @param obj
* 要删除的Mongo对象
*/
public void remove(Object obj) {
this.mongoTemplate.remove(obj);
} /**
* 加入对象
*
* @param obj
* 要加入的Mongo对象
*/
public void add(Object obj) {
this.mongoTemplate.insert(obj); } /**
* 改动对象
*
* @param obj
* 要改动的Mongo对象
*/
public void saveOrUpdate(Object obj) {
this.mongoTemplate.save(obj);
} /**
* 查询并分页
*
* @param entityClass
* 对象类型
* @param query
* 查询条件
* @param page
* 分页
* @return
*/
public <T> List<T> findByQuery(Class<T> entityClass, Query query, Page page) {
Long count = this.count(entityClass, query);
page.setCount(count);
int pageNumber = page.getCurrent();
int pageSize = page.getPageCount();
query.skip((pageNumber - 1) * pageSize).limit(pageSize);
return this.mongoTemplate.find(query, entityClass);
} /**
*
* @param entityClass
* 查询对象
* @param query
* 查询条件
* @return
*/
public <T> Long count(Class<T> entityClass, Query query) {
return this.mongoTemplate.count(query, entityClass);
} /**
* 批量插入
* @param entityClass 对象类
* @param collection 要插入的对象集合
*/
public <T> void addCollection(Class<T> entityClass, Collection<T> collection){
this.mongoTemplate.insert(collection, entityClass);
} public MongoTemplate getMongoTemplate() {
return mongoTemplate;
} }

Page.java

package com.yiyuwanglu.basecore.page;

import java.io.IOException;
import java.io.Serializable; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport; public class Page extends SimpleTagSupport implements Serializable { private static final long serialVersionUID = 1L;//序列号
private Integer current;//当前页码
private Long count;//记录总数
private Integer pageCount;//每页记录数
private String path;//页面链接
private String param;//传入的參数
private boolean notQueryCount = false;//为false在翻页时查询记录总数。默认false public Page() {
this.current = 1; // 默认第一页
this.count = 0L; // 共多少条记录
this.pageCount = 10; // 默认每页10条记录
} @Override
public void doTag() throws JspException, IOException {
int pageSize = (int) (this.count / this.pageCount + (this.count % this.pageCount > 0 ? 1 : 0));//共多少页
//显示当前页和总页数
JspWriter out = this.getJspContext().getOut();//指定输入流,用于页面输出分页信息
StringBuffer sb = new StringBuffer();//构建StringBuffer对象,用户拼接分页标签
sb.append("<div class=\"page\">");
sb.append("<ul>");
//假设当前页在第一页,则首页和上一页没有超链接
if (this.current == 1) {
sb.append("<li class=\"disabled\">首页</li><li class=\"disabled\">上一页</li>");
} else {
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(1);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">首页</a></li>");
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("? current=");
sb.append(this.current - 1);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">上一页</a></li>");
}
//以下的代码显示页码。当前页在中间位置
if (pageSize <= 10) {
for (int i = 1; i <= pageSize; i++) {
//假设页数小于等于10页,则所有显示
if (i == this.current) {//假设页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(i);
sb.append("</li>");
} else {//否则给出超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("? current=");
sb.append(i);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(i);
sb.append("</a></li>");
}
}
} else {//假设大于10页。则从当前页为中心仅仅显示当中10页
int index = 1;
if (this.current > 4) {//而且假设当前页大于4页,从当前页前4页開始显示10个页数
if (this.current + 4 >= pageSize) {//假设当前页+4 >= 总页数。最后10页所有显示出来
for (int j = pageSize - 9; j <= pageSize; j++) {
if (j == this.current) {//假设页码等于当前页。则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(j);
sb.append("</li>");
} else {//否则给定超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(j);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(j);
sb.append("</a></li>");
}
}
} else {
for (int j = this.current - 4; j <= pageSize; j++) {
if (j == this.current) {//假设页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(j);
sb.append("</li>");
} else {//否则给定超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(j);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(j);
sb.append("</a></li>");
}
index++;
if (index > 10) {//假设循环到10次则退出循环
break;
}
}
}
} else {
for (int i = 1; i <= pageSize; i++) {
//假设页数小于等于10页,则所有显示
if (i == this.current) {//假设页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(i);
sb.append("</li>");
} else {//否则给出超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(i);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(i);
sb.append("</a></li>");
}
index++;
if (index > 10) {
break;
}
}
}
}
//假设当前页是最后一页,则末页和下一页没有超链接
if (this.current.equals(pageSize) || this.count == 0) {
sb.append("<li class=\"disabled\">下一页</li><li class=\"disabled\">末页</li>");
} else {
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(this.current + 1);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">下一页</a></li>");
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(pageSize);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">末页</a></li>");
}
sb.append("</ul>");
sb.append("</div>");
out.print(sb);
} /**
* 获取总记录条数
*
* @return
*/
public Long getCount() {
return this.count;
} /**
* 设置总记录条数
*
* @param count
*/
public void setCount(Long count) {
this.count = count;
} /**
* 获取当前第几页
*
* @return
*/
public Integer getCurrent() {
return this.current;
} /**
* 设置当前第几页
*
* @param current
*/
public void setCurrent(Integer current) {
try {
if (current <= 0) {
this.current = 1;
} else {
this.current = current;
}
} catch (Exception e) {
this.current = 1;
}
} /**
* 获取每页多少条记录
*
* @return
*/
public Integer getPageCount() {
return this.pageCount;
} /**
* 设置每页多少条记录
*
* @param pageCount
*/
public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
} /**
* 获取URI地址
*
* @return
*/
public String getPath() {
return path;
} /**
* 设置URI地址
*
* @param path
*/
public void setPath(String path) {
this.path = path;
} /**
* 获取參数值
*
* @return
*/
public String getParam() {
return param;
} /**
* 设置參数值
*
* @param param
*/
public void setParam(String param) {
String[] x = param.split("&");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < x.length; i++) {
String[] y = x[i].split("=");
if (y.length > 1 && !"".equals(y[1].trim())) {
sb.append(x[i]);
sb.append("&");
}
}
this.param = sb.toString().substring(0, sb.toString().lastIndexOf("&"));
} /**
* 获取总页数
*
* @return
*/
public int getPages() {
if (this.count % this.pageCount == 0) {
return (int) (this.count / this.pageCount);
} else {
return (int) (this.count / this.pageCount + 1);
}
} /**
* 是否为第一页
*
* @return
*/
public boolean firstEnable() {
return previoEnable();
} /**
* 是否为最后一页
*
* @return
*/
public boolean lastEnable() {
return nextEnable();
} /**
* 是否有下一页
*
* @return
*/
public boolean nextEnable() {
return this.current * this.pageCount < this.count;
} /**
* 是否有上一页
*
* @return
*/
public boolean previoEnable() {
return this.current > 1;
} public boolean isNotQueryCount() {
return this.notQueryCount;
} public void setNotQueryCount(boolean notQueryCount) {
this.notQueryCount = notQueryCount;
} /**
* 获取任一页第一条数据在数据集的位置.
*
* @param pageNo 从1開始的页号
* @param pageSize 每页记录条数
* @return 该页第一条数据
*/
public int getStartOfPage(long pageNo, long pageSize) {
return (int) ((pageNo - 1) * pageSize);
}
}

User.java

package com.yiyuwanglu.test.entity;

import java.util.Date;

import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class User { private String id;
private String username;
private int age;
private Date createTime; public User() { } public User(String username, int age, Date createTime) {
super();
this.username = username;
this.age = age;
this.createTime = createTime;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} }

BaseTest.java

package basetest;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:config/spring/applicationContext.xml"})
public class BaseTest { }

TestBaseDao.java

package basetest.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List; import javax.annotation.Resource; import org.junit.Test;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import basetest.BaseTest; import com.yiyuwanglu.basecore.dao.mongodb.MongoDBBaseDao;
import com.yiyuwanglu.test.entity.User; public class TestBaseDao extends BaseTest { @Resource(name = "mongoDBBaseDao")
MongoDBBaseDao mongoDBBaseDao; /**
* 插入单条数据。id自己定义
*/
public void testAdd() {
User user = new User();
Date creatTime = new Date();
user.setCreateTime(creatTime);
user.setAge(10);
user.setUsername("福東江a");
this.mongoDBBaseDao.add(user);
} /**
* 插入100万条数据,id自己定义
*/
@Test
public void testAddCollection() {
List<User> userList = new ArrayList<User>();
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 100000; i++) {
User user = new User();
Date creatTime = new Date();
user.setCreateTime(creatTime);
user.setAge(10);
user.setUsername("册南");
userList.add(user);
}
}
this.mongoDBBaseDao.add(userList);
} @Test
public void testFindAll() {
List<User> userList = this.mongoDBBaseDao.findAll(User.class);
for (User user : userList) {
System.out.println("id:" + user.getId() + " username:" + user.getUsername() + " age:" + user.getAge());
}
System.out.println("获取所有的数据----------------------");
} @Test
public void testFindById() {
User user = this.mongoDBBaseDao.findById(User.class, "1234567");
System.out.println(user.getUsername());
System.out.println("获取单个对象----------------------");
} @Test
public void testUpdate() {
User user = this.mongoDBBaseDao.findById(User.class, "1234567");
user.setUsername("反倒是淮");
this.mongoDBBaseDao.saveOrUpdate(user);
User newUser = this.mongoDBBaseDao.findById(User.class, "1234567");
System.out.println(newUser.getUsername());
System.out.println("改动数据成功");
this.mongoDBBaseDao.saveOrUpdate(user);
} @Test
public void testRemove() {
User user = this.mongoDBBaseDao.findById(User.class, "1234567");
this.mongoDBBaseDao.remove(user);
User oldUser = this.mongoDBBaseDao.findById(User.class, "1234567");
if (oldUser == null) {
System.out.println(oldUser == null);
System.out.println("删除对象成功");
}
this.mongoDBBaseDao.add(user);
} @Test
public void testCount() {
Query query = new Query();
Criteria criteria = new Criteria();
criteria.and("username").is("福東");
query.addCriteria(criteria);
long total = this.mongoDBBaseDao.count(User.class, query);
System.out.println("用户总数:" + total);
} }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

springmvc+mongodb+maven 项目测试代码的更多相关文章

  1. springmvc+mongodb+maven 项目搭建配置

    操作步骤我就不再细化了 项目能运行,测试过了,先上配置,另一篇文章上代码,点击下载源码 项目结构 pom.xml <project xmlns="http://maven.apache ...

  2. IntelliJ IDEA 创建Spring+SpringMVC+mybatis+maven项目

    参考自:https://www.cnblogs.com/hackyo/p/6646051.html 第一步: 创建maven项目 输入项目名和工程id 选择maven 默认就可以了 刚开始时间比较长, ...

  3. spring springmvc mybatis maven 项目整合示例-导航页面

    spring原理 实践解析-简单的helloworld spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包 spring原理案例-基本项目 ...

  4. IDEA maven 项目修改代码不生效,mvn clean、install 后才生效

    Maven项目进行修改代码后我们重新运行代码,查看我们target目录下的class文件是否发生了变化.    如何查看class文件,鼠标移到项目,点击右键,然后点击 show in Explore ...

  5. CXF WebService整合SpringMVC的maven项目

    首先推荐博客:http://www.cnblogs.com/xdp-gacl/p/4259481.html   http://blog.csdn.net/hu_shengyang/article/de ...

  6. IntelliJ IDEA 创建Spring+SpringMVC+hibernate+maven项目

    第一步: 新建maven管理的web项目, 具体步骤参考:http://www.cnblogs.com/gczmn/p/8693734.html 第二步: 创建项目结构, 完整项目结构如下: 第三步: ...

  7. idea新手教程 如何springmvc创建Maven项目

    1.点击Create project,选择maven,勾选Create from archetype选择web-app,如图 2 输入    Group-Id     //组织名,也是作者名 Arti ...

  8. MongoDB之Java测试代码(DAO层)

    MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoInit.java package com.wlwcloud.datate ...

  9. springmvc+mybatis+maven项目框架搭建

    项目的目录

随机推荐

  1. 蜘蛛侠天堂,打死我mac键盘

    今天是周末,在我租住的房间,以一个离奇事件. 一个蜘蛛侠天堂,趴在我的假期车窗玻璃,爬下沿着玻璃.特别糟糕.可以飞檐走壁. 可惜体力不支,摔死在我的mac键盘上. 有图有视频. 视频链接:http:/ ...

  2. PAT 1055

    题目链接:https://www.patest.cn/contests/pat-b-practise/1055 分析:思路很巧妙,感觉很有意义的字符串题目 #include<bits/stdc+ ...

  3. 图片本地预览 flash html5

    dataURI 一种能够在页面嵌入外部资源的URI方案.能够降低图片或者样式表的http请求数量,提高效率. ie8把dataURI 的属性值限制在32k以内. 图片本地预览: 由于安全原因,通过fi ...

  4. OCP读书笔记(3) - 使用RMAN恢复目录

    创建恢复目录 在hndx上创建恢复目录:[oracle@oracle admin]$ export ORACLE_SID=hndx[oracle@oracle admin]$ sqlplus / as ...

  5. 《TCP/IP作品详细解释2:实现》笔记--Radix树路由表

    通过IP完整的路由是路由机制,它通过搜索路由表来确定从哪个分组被发送的接口执行此,它是不一样的路由策略,路由策略 它是一组规则,这些规则可以被用来确定哪些路由编程到路由表,Net/3内核实现的路由机制 ...

  6. redis做RDB时请求超时case

        近期在排查redis做rdb时会有部分请求超时的case.初步推断是我们redisserver上开启了THP(Transparent Huge Pages).      1) Linux本身的 ...

  7. ON、WHERE、HAVING的差别

    ON .WHERE.HAVING都能通过限制条件筛选数据,但他们的使用及其不同.以下我们来分析三者之间的差别. 1.       ON 和WHERE 全部的查询都回产生一个中间暂时报表,查询结果就是从 ...

  8. hdu4151(二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4151 题意:找出比n小的没有重复数字的总个数,例如12以内11不符合,1~10都符合. 分析:直接利用 ...

  9. Fashion Meets Finance聚会来袭-7月19日 北京

    http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NjEzMjMyMQ%3D%3D&appmsgid=10000704&itemidx= ...

  10. SVN更改登录用户(转)

    一) 原地址:http://www.ixna.net/articles/2606 //证书缓存 $ svn list https://host.example.com/repos/project Er ...