前面写了一篇 java中操作mongodb
但是其中的操作都比较直白 没有经过封装 而且 每次使用前都要先写 数据库名和Ip端口
这次我们把spring和mongodb整合起来
内容如下:
1.创建项目和配置xml
2.spring-mongodb的增删改查 mapreduce
1.创建项目和配置xml
我们首先创建一个叫SM的项目
然后增加web框架
增加web框架我们看到的项目如图:
下载: 整合spring和mongodb用到的包和配置文件
解压得到lib文件夹和mongoConfig配置文件 这它们放入项目的WEB-INF文件夹中
放入xml后刷新我们看到的项目如图:
新建User类和UserService类如下:
User.java
package mongo; public class User { private String name; private String message; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
Userservice.java
package mongo; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.MapReduceOutput; public class Userservice { private static String USERS_COLLECTION = "users"; public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext( "WEB-INF/mongoConfig.xml"); MongoTemplate mongoTemplate = (MongoTemplate) ctx .getBean("mongoTemplate"); // 插入数据 // User user=new User(); // user.setName("zoe"); // user.setMessage("try insert"); // mongoTemplate.insert(user,USERS_COLLECTION); // System.out.println("insert finish"); // 查询 // 查询全部 // List<User> users=mongoTemplate.find(new Query(), // User.class,USERS_COLLECTION); // for(User a:users) // { // System.out.println(a.getName()+" "+a.getMessage()); // } // 查询一个 // User a = mongoTemplate.findOne( // new Query(Criteria.where("name").is("zoe")), User.class, // USERS_COLLECTION); // System.out.println(a.getName() + " " + a.getMessage()); // 模糊查询 // List<User> users = mongoTemplate.find( // new Query(new Criteria("name").regex(".*?" + "o" + ".*")) // .limit(9), User.class, USERS_COLLECTION); // for (User a : users) { // System.out.println(a.getName() + " " + a.getMessage()); // } // 修改 // User a = mongoTemplate.findOne( // new Query(Criteria.where("name").is("zoe")), User.class, // USERS_COLLECTION); // System.out.println(a.getName() + " " + a.getMessage()); // mongoTemplate // .updateFirst(new Query(Criteria.where("name").is("zoe")), // new Update().set("message", "update success"), // USERS_COLLECTION); // User b = mongoTemplate.findOne( // new Query(Criteria.where("name").is("zoe")), User.class, // USERS_COLLECTION); // System.out.println(b.getName() + " " + b.getMessage()); // 删除 // User a = mongoTemplate.findOne( // new Query(Criteria.where("name").is("zoe")), User.class, // USERS_COLLECTION); // System.out.println(a); // mongoTemplate.remove(new Query(Criteria.where("name").is("zoe")), // USERS_COLLECTION); // User b = mongoTemplate.findOne( // new Query(Criteria.where("name").is("zoe")), User.class, // USERS_COLLECTION); // System.out.println(b); //mapreduce 统计同名数量 DBCollection coll = mongoTemplate.getCollection("users"); String map = "function() { emit(this.name, {count:1});}"; String reduce = "function(key, values) {var total = 0;for(var i=0;i<values.length;i++){total += values[i].count;}return {count:total};}"; String result = "resultCollection"; MapReduceOutput mapReduceOutput = coll.mapReduce(map, reduce.toString(), result, null); DBCollection resultColl = mapReduceOutput.getOutputCollection(); DBCursor cursor = resultColl.find(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } }
结果演示:
插入和查询所有
查询单个name为zoe的
模糊查询name中有o的
修改数据
删除数据
mapreduce统计数量