Spring整合mongdb

来源:互联网 发布:网络审查 论文 编辑:程序博客网 时间:2024/06/14 17:11

首先Spring的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>  <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:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"      xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo"      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd      http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">      <context:component-scan base-package="com.mongo" />      <!-- 获取配置资源 -->      <context:property-placeholder location="classpath:jdbc.properties" />      <bean class="com.mongo.DAOImpl.UserDaoImpl"></bean>      <mongo:mongo id="mongo"  replica-set="${mongo.replicaSet}">        <!--           connections-per-host: 每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住            max-wait-time: 被阻塞线程从连接池获取连接的最长等待时间(ms)           connect-timeout:在建立(打开)套接字连接时的超时时间(ms)           socket-timeout:套接字超时时间;该值会被传递给Socket.setSoTimeout(int)           slave-ok:指明是否答应驱动从次要节点或者奴隶节点读取数据           -->      <mongo:options          connections-per-host="${mongo.connectionsPerHost}"          threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"          connect-timeout="${mongo.connectTimeout}"           max-wait-time="${mongo.maxWaitTime}"          auto-connect-retry="${mongo.autoConnectRetry}"           socket-keep-alive="${mongo.socketKeepAlive}"          socket-timeout="${mongo.socketTimeout}"          slave-ok="${mongo.slaveOk}"          write-number="${mongo.writeNumber}"          write-timeout="${mongo.riteTimeout}"          write-fsync="${mongo.writeFsync}"/>      </mongo:mongo>         <!-- 设置使用的数据库 名-->        <mongo:db-factory dbname="test" mongo-ref="mongo"/>        <!-- mongodb的模板 -->       <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">          <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>       </bean>  </beans>  

jdbc.properties:

mongo.replicaSet=192.168.104.131:27017  mongo.connectionsPerHost=8  mongo.threadsAllowedToBlockForConnectionMultiplier=4  mongo.connectTimeout=1000  mongo.maxWaitTime=1500  mongo.autoConnectRetry=true  mongo.socketKeepAlive=true  mongo.socketTimeout=1500  mongo.slaveOk=true  mongo.writeNumber=1  mongo.riteTimeout=0  mongo.writeFsync=true 

添加的实体类:

package model;import java.io.Serializable;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;@Documentpublic class User implements Serializable {    private static final long serialVersionUID = -7351729135012380019L;    @Id    private String id;      private String name;      private int age;      private String password;      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public int getAge() {          return age;      }      public void setAge(int age) {          this.age = age;      }      public String getPassword() {          return password;      }      public void setPassword(String password) {          this.password = password;      }      public String getId() {          return id;      }      public void setId(String id) {          this.id = id;      }}

方法接口:MongoBase

package DAO;import java.io.File;import java.util.List;import java.util.Map;import model.User;import com.mongodb.gridfs.GridFSDBFile;public interface MongoBase<T> {    //添加      public void insert(T object,String collectionName);        //根据条件查找      public T findOne(Map<String,Object> params,String collectionName);        //查找所有      public List<T> findAll(Map<String,Object> params,String collectionName);        //修改      public void update(Map<String,Object> params,String collectionName);       //创建集合      public void createCollection(String collectionName);      //根据条件删除      public void remove(Map<String,Object> params,String collectionName);    //保存文件    public void SaveFile(String collectionName, File file, String fileid,            String companyid, String filename);    //取出文件    public GridFSDBFile retrieveFileOne(String collectionName, String filename);    //分页查询    public List<User> findList(int skip, int limit); }

UserDao

package DAO;import model.User;public interface UserDao extends MongoBase<User> {}

CRUD方法:

package DAOImpl;import java.io.File;import java.util.List;import java.util.Map;import javax.annotation.Resource;import model.User;import org.springframework.data.domain.Sort;import org.springframework.data.domain.Sort.Direction;import org.springframework.data.domain.Sort.Order;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 org.springframework.stereotype.Repository;import com.mongodb.DB;import com.mongodb.gridfs.GridFS;import com.mongodb.gridfs.GridFSDBFile;import com.mongodb.gridfs.GridFSInputFile;import DAO.UserDao;@Repository("userDaoImpl")public class UserDaoImpl implements UserDao {    @Resource      private MongoTemplate mongoTemplate;    @Override    public void insert(User object, String collectionName) {        mongoTemplate.insert(object, collectionName);    }    @Override    public User findOne(Map<String, Object> params, String collectionName) {        return mongoTemplate.findOne(new Query(Criteria.where("id").is(params.get("id"))), User.class,collectionName);      }    @Override    public List<User> findAll(Map<String, Object> params, String collectionName) {        List<User> result = mongoTemplate.find(new Query(Criteria.where("age").lt(params.get("maxAge"))), User.class,collectionName);          return result;    }    @Override    public void update(Map<String, Object> params, String collectionName) {         mongoTemplate.upsert(new Query(Criteria.where("id").is(params.get("id"))), new Update().set("name", params.get("name")), User.class,collectionName);        }    @Override    public void createCollection(String collectionName) {        mongoTemplate.createCollection(collectionName);    }    @Override    public void remove(Map<String, Object> params, String collectionName) {        mongoTemplate.remove(new Query(Criteria.where("id").is(params.get("id"))),User.class,collectionName);    }    @Override    public void SaveFile(String collectionName, File file, String fileid,            String companyid, String filename) {        try {            //获取连接数据库            DB db = this.mongoTemplate.getDb();            // 存储fs的根节点,文件操作是在DB的基础上实现的,与表和文档没有关系            GridFS gridFS = new GridFS(db, collectionName);            GridFSInputFile gfs = gridFS.createFile(file);            gfs.put("aliases", companyid);            gfs.put("filename", fileid);            gfs.put("contentType", filename.substring(filename.lastIndexOf(".")));            gfs.save();        } catch (Exception e) {            e.printStackTrace();            System.out.println("存储文件时发生错误!!!");        }    }    @Override    public GridFSDBFile retrieveFileOne(String collectionName, String filename) {        try {            DB db = this.mongoTemplate.getDb();            // 获取fs的根节点            GridFS gridFS = new GridFS(db, collectionName);            GridFSDBFile dbfile = gridFS.findOne(filename);            if (dbfile != null) {                return dbfile;            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    @Override    public List<User> findList(int skip, int limit) {        Query query = new Query();          query.with(new Sort(new Order(Direction.ASC, "_id")));          query.skip(skip).limit(limit);          return this.mongoTemplate.find(query, User.class);    }   }

测试类:

package test;import java.util.HashMap;import java.util.List;import java.util.Map;import model.User;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;import DAO.UserDao;public class TestUser {    private static UserDao userDaoImpl;      private static  ClassPathXmlApplicationContext  app;      private static String collectionName;    public static void initSpring() {           try {                  app = new ClassPathXmlApplicationContext(new String[] { "classpath:applicationContext-mongo.xml",                    "classpath:spring-dispatcher.xml" });            userDaoImpl = (UserDao) app.getBean("userDaoImpl");           collectionName ="users";          } catch (Exception e) {              e.printStackTrace();          }             }           @Test        public void testAdd()          {              //添加一百个user              for(int i=0;i<100;i++){                  User user =new User();                  user.setId(""+i);                  user.setAge(i);                  user.setName("zcy"+i);                  user.setPassword("zcy"+i);                  userDaoImpl.insert(user,collectionName);              }              Map<String,Object> params=new HashMap<String,Object>();              params.put("maxAge", 50);              List<User> list=userDaoImpl.findAll(params,collectionName);              System.out.println("user.count()=="+list.size());          }        @Test        public void testUdate(){              Map<String,Object> params=new HashMap<String,Object>();              params.put("id", "1");              User user=userDaoImpl.findOne(params, collectionName);              System.out.println("user.name==="+user.getName());              System.out.println("=============update==================");              params.put("name", "hello");              userDaoImpl.update(params, collectionName);               user=userDaoImpl.findOne(params, collectionName);              System.out.println("user.name==="+user.getName());        }}

所需jar包:
log4j-1.2.14.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar
spring-aop-3.0.5.RELEASE.jar
spring-beans-3.0.5.RELEASE.jar
spring-context-3.0.5.RELEASE.jar
spring-context-support-3.0.5.RELEASE.jar
spring-data-commons-1.10.2.RELEASE.jar
spring-data-mongodb-1.7.2.RELEASE.jar
spring-tx-3.0.5.RELEASE.jar
mongo-java-driver-2.10.1.jar
junit.jar

0 0
原创粉丝点击