java-spring与mongodb的整合方式一 自动注入xml
来源:互联网 发布:知止什么意思 编辑:程序博客网 时间:2024/04/28 08:50
我们前面写了一篇 : java-spring与mongodb的整合方式一 手动注入xml
但是 在每个页面中都要注入一次xml。
ApplicationContext ctx = new FileSystemXmlApplicationContext( "WEB-INF/mongoConfig.xml"); MongoTemplate mongoTemplate = (MongoTemplate) ctx .getBean("mongoTemplate");
而且对class的操作都没进行过方法的封装。
这次 我们用一个搭好的spring+strust+mongodb框架 对mongodb进行操作。
框架下载地址(我的运行环境是myeclipse10)
mongodb+spring+strust框架完整示例版本
下载后如果要对项目继续重命名的话: 操作如下图:
框架中的结构如图:
新建需要操作的class类
package com.mongo.entity;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;}}
操作mongodb的接口和实现类: (基类和继承类)
基类:GenericReposityImpl
package com.mongo.reposity.Impl;import java.util.List;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.mongo.reposity.GenericReposity;import com.mongodb.Mongo;import com.mongodb.WriteResult;public class GenericReposityImpl<T> extends MongoTemplate implements GenericReposity<T> {public GenericReposityImpl(Mongo mongo, String databaseName) {super(mongo, databaseName);}public List<T> getAllObjects(Class<T> clazz) {return findAll(clazz);}public void saveObject(Object obj) {insert(obj);}public void saveObjects(List<T> objects) {for (T t : objects) {insert(t);}}public T getObject(Class<T> clazz, String id) {return findOne(new Query(Criteria.where("id").is(id)), clazz);}public WriteResult updateObject(Class<T> clazz, String id, String name) {return updateFirst(new Query(Criteria.where("id").is(id)),Update.update("name", name), clazz);}public void deleteObject(Class<T> clazz, String id) {remove(new Query(Criteria.where("id").is(id)), clazz);}public void createDbCollection(Class<T> clazz) {if (collectionExists(clazz)) {createCollection(clazz);}}public void dropDbCollection(Class<T> clazz) {if (collectionExists(clazz)) {dropCollection(clazz);}}}
接口:GenericReposity
package com.mongo.reposity.Impl;import java.util.List;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.mongo.reposity.GenericReposity;import com.mongodb.Mongo;import com.mongodb.WriteResult;public class GenericReposityImpl<T> extends MongoTemplate implements GenericReposity<T> {public GenericReposityImpl(Mongo mongo, String databaseName) {super(mongo, databaseName);}public List<T> getAllObjects(Class<T> clazz) {return findAll(clazz);}public void saveObject(Object obj) {insert(obj);}public void saveObjects(List<T> objects) {for (T t : objects) {insert(t);}}public T getObject(Class<T> clazz, String id) {return findOne(new Query(Criteria.where("id").is(id)), clazz);}public WriteResult updateObject(Class<T> clazz, String id, String name) {return updateFirst(new Query(Criteria.where("id").is(id)),Update.update("name", name), clazz);}public void deleteObject(Class<T> clazz, String id) {remove(new Query(Criteria.where("id").is(id)), clazz);}public void createDbCollection(Class<T> clazz) {if (collectionExists(clazz)) {createCollection(clazz);}}public void dropDbCollection(Class<T> clazz) {if (collectionExists(clazz)) {dropCollection(clazz);}}}
实现类:UserReposityImpl
package com.mongo.reposity.Impl;import java.util.List;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import com.mongo.entity.User;import com.mongo.reposity.UserReposity;import com.mongodb.Mongo;public class UserReposityImpl extends GenericReposityImpl<User> implementsUserReposity {public UserReposityImpl(Mongo mongo, String databaseName) {super(mongo, databaseName);// TODO Auto-generated constructor stub}public List<User> getUsers(int begin, int end) {return find(new Query().limit(end - begin).skip(begin), User.class);}public List<User> getUsers(String Name) {return find(new Query(new Criteria("name").regex(".*?" + Name + ".*")).limit(5),User.class);}public List<User> getUsers(int begin, int end, List<Condition> conditions) {Query query = new Query();if (conditions != null && conditions.size() > 0) {for (Condition condition : conditions) {query.addCriteria(Criteria.where(condition.getKey()).is(condition.getValue()));}}return find(query.limit(end - begin).skip(begin),User.class);}public long getCount(String message) {Query query = new Query();query.addCriteria(Criteria.where("message").is(message));return count(query, User.class);}public List<User> getUsersBynames(int begin, int end,List<String> names) {Query query = new Query();query.addCriteria(Criteria.where("name").in(names));return find(query.limit(end - begin).skip(begin), User.class);}public WriteResult updateUserUpdateName(User user,String name) { String id=user.getId();return updateFirst(new Query(Criteria.where("id").is(id)),Update.update("name", name),User.class);}public void mapReduse(){DBCollection coll = getCollection("user"); 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()) { Map object = cursor.next().toMap(); System.out.println(object.get("value"));// System.out.println(cursor.next().get("value"));// User user = (User)cursor.next(); } }}
实现类接口:UserReposity
package com.mongo.reposity;import java.util.List;import com.mongo.entity.User;public interface UserReposity extends GenericReposity<User>{public List<User> getUsers(int begin,int end);/** * * @param projectName * @return */public List<User> getUsers(String projectName);public List<User> getUsers(int begin, int end, List<Condition> conditions);public long getCount(String message);public List<User> getUsersBynames(int begin, int end,List<String> names);public WriteResult updateUserUpdateName(User user,String name);}
条件类(辅助类):
Condition.java
package com.mongo.reposity;/** * 条件 * * @作者 zoe * @版本 * @更新时间 */public class Condition {private String key;private Object value;public String getKey() {return key;}public void setKey(String key) {this.key = key;}public Object getValue() {return value;}public void setValue(Object value) {this.value = value;}}
相关配置文件xml:
common-beans.xml 可更改操作的数据库名称 目前为student 和 链接地址 192.168.0.121
<?xml version="1.0" encoding="utf-8"?><!-- 指定Spring配置文件的Schema信息 --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mongo="http://www.springframework.org/schema/data/mongo"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongo" ref="mongo" /><constructor-arg name="databaseName" value="student"/></bean><bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"><property name="host" value="192.168.0.121"/><property name="port" value="27017"/></bean></beans>
<?xml version="1.0" encoding="GBK"?><!-- 指定Spring配置文件的Schema信息 --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- 配置DAO组件的模板 --><bean id="genericReposity" class="com.mongo.reposity.Impl.GenericReposityImpl"parent="mongoTemplate"></bean><bean id="userReposity" class="com.mongo.reposity.Impl.UserReposityImpl"parent="mongoTemplate"></bean></beans>
getDateAcition.java
package com.mongo.action;import java.util.Map;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;import net.sf.json.util.CycleDetectionStrategy;import org.springframework.data.mongodb.core.MongoOperations;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;import com.mongo.entity.User;import com.mongo.reposity.UserReposity;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.MapReduceOutput;import com.opensymphony.xwork2.ActionSupport;public class getDataAction extends ActionSupport {/** * */private UserReposity userReposity;public void setUserReposity(UserReposity userReposity) {this.userReposity = userReposity;}private JSONObject user;private static final long serialVersionUID = 535742118015700220L;@Overridepublic String execute() {JsonConfig jsonConfig = new JsonConfig();jsonConfig.setIgnoreDefaultExcludes(false);// jsonConfig.setExcludes(new String[] { "name" });jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);// 新增数据// User u=new User();// u.setName("zoe");// u.setMessage("first blood");// userReposity.saveObject(u);// System.out.println("写入完成"+u.toString());// //查询数据// //获取全部// List<User> us=userReposity.getAllObjects(User.class);// //从数目上查询取0到1000// List<User> us1=userReposity.getUsers(0, 1000);// //条件查询// List<Condition> cds=new ArrayList<Condition>();// Condition cd=new Condition();// cd.setKey("name");// cd.setValue("zoe");// cds.add(cd);// List<User> us2=userReposity.getUsers(0, 1000, cds);// //模糊查询// List<User> us3=userReposity.getUsers("oe");// //查询数量// long count=userReposity.getCount("first blood");// //查询属于的集合(in) 不属于(nin)// List<String> names=new ArrayList<String>();// names.add("zoe");// names.add("koe");// List<User> us4=userReposity.getUsersBynames(0, 1000,names);//// //更新// User u=userReposity.getAllObjects(User.class).get(0);// userReposity.updateUserUpdateName(u, "joe");//// //删除// userReposity.deleteObject(User.class, "534cea00cf20ab0525bdc53e");// mapreduceMongoTemplate m = (MongoTemplate) userReposity;DBCollection coll = m.getCollection("user"); //集合名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());// Map object = cursor.next().toMap();// System.out.println(object.get("value")); } //MongoOperations mongoOps = (MongoOperations) userReposity;//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};}";//try {//MapReduceResults<User> results = mongoOps.mapReduce("requesterBill",//map,//reduce,////new MapReduceOptions().outputCollection("mr_out"),//User.class);//for (User valueObject : results) {//System.out.println(valueObject);//}//} catch (Exception e) {//e.printStackTrace();//}// String jsonfacility =// "{\"id\":\"PublicSecurity\",\"name\":\"数据\",\"value\":\"123\"}";// user = JSONObject.fromObject(jsonfacility);//userReposity.mapReduse();return SUCCESS;}public JSONObject getUser() {return user;}public void setUser(JSONObject user) {this.user = user;}}
action相关配置:
action.xml
<?xml version="1.0" encoding="GBK"?><!-- 指定Spring配置文件的Schema信息 --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- 配置DAO组件的模板 --><bean id="getData" class="com.mongo.action.getDataAction" ><property name="userReposity" ref="userReposity"></property></bean></beans>
package.xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><package name="data" extends="zoe-default" namespace="/data"><!-- 根据项目 --><action name="getData" class="getData"><result type="json"></result></action></package></struts>
特殊查询用法积累:
添加在UserReposityImpl中
1.增加排序
public List<User> getByLinkUrlId(int begin, int end, String linkUrlid,String orderField,Sort.Direction direction ) {Query query = new Query();query.addCriteria(Criteria.where("pageUrl.linkUrl.id").is(linkUrlid));return find(query.limit(end - begin).skip(begin).with(new Sort(new Sort.Order(direction, orderField))),User.class);}
2.按时间段查询
public List<Log> getLogs(List<Condition> conditions,String beginDate,String endDate){Query query = new Query();if (conditions != null && conditions.size() > 0) {for (Condition condition : conditions) {query.addCriteria(Criteria.where(condition.getKey()).regex(".*?\\" +condition.getValue()+ ".*"));}}query.addCriteria(Criteria.where("crawlTime").lt(new Date(endDate)).gt(new Date(beginDate)));return find(query,Log.class);}
3.或者查询
Criteria criteria = new Criteria(); if (!StringUtils.isEmpty(data.get("name"))) { criteria.orOperator( Criteria.where("name").regex( ".*" + data.get("name") + ".*", "i"), Criteria.where("chromosome").regex( ".*" + data.get("name") + ".*", "i")); } Query query = Query.query(criteria);
0 0
- java-spring与mongodb的整合方式一 自动注入xml
- java-spring与mongodb的整合方式一 手动注入xml
- spring与struts的整合方式一
- mongodb的java驱动与spring的整合
- mongodb的java驱动与spring的整合
- quartz 与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- MongoDB与Java的整合
- mongodb与spring整合
- mybatis与spring整合(方式一)
- Spring MVC和shiro整合时自动注入的问题
- JUnit与Spring的整合——JUnit的TestCase如何自动注入Spring容器托管的对象
- JUnit与Spring的整合——JUnit的TestCase如何自动注入Spring容器托管的对象
- spring+mongodb的整合
- 通讯录见解
- 第八周——课本例题的熟悉。
- 《步步惊情》曝忘情激吻照 吴奇隆刘诗诗秀甜蜜
- 回调函数的作用
- mac下如何连接小米
- java-spring与mongodb的整合方式一 自动注入xml
- 实现复数类中的运算符重载
- 数据库有数据,但hibernate返回null
- http://akesu.ganji.com/zhiyepeixun/917163688x.htm
- C++第7周(春)项目2 再一个深复制
- centos导入数据库命令
- “奶奶”专业户柏青逝世 享年76岁
- Lua中的table函数库
- 推进视图渐隐渐现效果实现代码