MongoDb的Java客户端配置

MongoDb的Java客户端配置

一 MongoDb介绍

二 Java客户端配置

三 MongoDB GridFS存取文件

一 MongoDb介绍

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

二 java客户端配置

2.1 属性配置文件mongo.properties

[java]  view plain  copy
  1. mongo.databaseName = test_db  
  2. mongo.host = 192.168.13.127  
  3. mongo.port = 27017  
2.2 xml文件springMongoDb.xml
[java]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
  7.     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd  
  8.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd  
  9.     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">  
  10.       
  11.     <bean id="MongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
  12.         <constructor-arg name="databaseName"  value="${mongo.databaseName}"/>  
  13.         <constructor-arg name="mongo" ref="mongo"/>  
  14.     </bean>  
  15.       
  16.     <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">  
  17.         <property name="host" value = "${mongo.host}"></property>  
  18.         <property name="port" value = "${mongo.port}"></property>  
  19.     </bean>  
  20. </beans>  

2.3 maven上添加mongodb的包

[java]  view plain  copy
  1. <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->  
  2. <dependency>  
  3.     <groupId>org.mongodb</groupId>  
  4.     <artifactId>mongo-java-driver</artifactId>  
  5.     <version>3.4.2</version>  
  6. </dependency>  
  7. <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->  
  8. <dependency>  
  9.     <groupId>org.springframework.data</groupId>  
  10.     <artifactId>spring-data-mongodb</artifactId>  
  11.     <version>1.10.1.RELEASE</version>  
  12. </dependency>  
2.4 mongodb基础类

MongoIntf.java

[java]  view plain  copy
  1. package com.mycompany.mongo.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.data.mongodb.core.query.Query;  
  6. import org.springframework.data.mongodb.core.query.Update;  
  7.   
  8. public interface MongoIntf<T>{  
  9.   
  10.     /*保存一个对象*/  
  11.     public void save(T t);  
  12.       
  13.     /*根据对象Id查找该对象*/  
  14.     public T queryById(Class<T> cls,String id);  
  15.       
  16.     /*根据条件查询集合*/  
  17.     public List<T> queryList(Class<T> cls,Query query);  
  18.       
  19.     /*通过条件查询单个实体*/  
  20.     public T queryOne(Class<T> cls,Query query);  
  21.       
  22.     /*分页查询*/  
  23.     public List<T> getPage(Class<T> cls,Query query, int start, int size);  
  24.       
  25.     /*查询符合条件的记录总数*/  
  26.     public Long getPageCount(Class<T> cls,Query query);  
  27.       
  28.     /*根据id删除对象*/  
  29.     public void deleteById(Class<T> cls,String id);  
  30.       
  31.     /*删除对象*/  
  32.     public void delete(T t);  
  33.       
  34.     /*更新指定id的属性值*/  
  35.     public void updateFirst(Class<T> cls,String id, String objName, String objValue);  
  36.       
  37.     /*查找更新*/  
  38.     public void updateInser(Class<T> cls,Query query, Update update);  
  39.       
  40. }  

MongoSupport.java

[java]  view plain  copy
  1. package com.mycompany.mongo.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.slf4j.Logger;  
  6. import org.slf4j.LoggerFactory;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.data.mongodb.core.MongoTemplate;  
  9. import org.springframework.data.mongodb.core.query.Criteria;  
  10. import org.springframework.data.mongodb.core.query.Query;  
  11. import org.springframework.data.mongodb.core.query.Update;  
  12.   
  13. public class MongoSupport<T> implements MongoIntf<T>{  
  14.   
  15.     private Logger logger = LoggerFactory.getLogger(MongoSupport.class);  
  16.      
  17.     @Autowired  
  18.     public MongoTemplate mongoTemplate;  
  19.   
  20.     /**@Description 
  21.      * 保存一个对象 
  22.      */  
  23.     @Override  
  24.     public void save(T t){  
  25.         this.mongoTemplate.save(t);  
  26.     }  
  27.     /**@Description 
  28.      * 查找对应id的对象,id对应Collection中记录的_id字段 
  29.      */  
  30.     public T queryById(Class<T> cls,String id) {  
  31.         Query query = new Query();  
  32.         Criteria criteria = Criteria.where("_id").is(id);  
  33.         query.addCriteria(criteria);  
  34.         logger.info(cls+"[Mongo]queryById:" + query);  
  35.         return this.mongoTemplate.findOne(query, cls);  
  36.     }  
  37.     /**@Description 
  38.      * 根据条件查询集合 
  39.      */  
  40.     public List<T> queryList(Class<T> cls,Query query){  
  41.         logger.info(cls+"[Mongo]queryList:" + query);  
  42.         return this.mongoTemplate.find(query, cls);  
  43.     }  
  44.     /**@Description 
  45.      * 通过条件查询单个实体 
  46.      * 查询单个用的是mongoTemplate.findOne方法,查询多条的用的是mongoTemplate.find 
  47.      */  
  48.     public T queryOne(Class<T> cls,Query query){  
  49.         logger.info(cls+"[Mongo] queryOne:" + query);  
  50.         return this.mongoTemplate.findOne(query, cls);  
  51.     }  
  52.     /**@Description 
  53.      * 通过条件进行分页查询 
  54.      * 类似mysql查询中的limit 
  55.      */  
  56.     public List<T> getPage(Class<T> cls,Query query, int start, int size){  
  57.         query.skip(start);  
  58.         query.limit(size);  
  59.         List<T> lists = this.mongoTemplate.find(query, cls);  
  60.         logger.info(cls+"[Mongo] queryPage:" + query + "(" + start +"," + size +")");  
  61.         return lists;  
  62.     }  
  63.     /**@Description 
  64.      * 根据条件查询库中符合记录的总数,为分页查询服务 
  65.      */  
  66.     public Long getPageCount(Class<T> cls,Query query){  
  67.         logger.info(cls+"[Mongo]queryPageCount:" + query);  
  68.         return this.mongoTemplate.count(query, cls);  
  69.     }  
  70.       
  71.     /**@Description 
  72.      * 根据id删除对象 
  73.      */  
  74.     public void deleteById(Class<T> cls,String id){  
  75.         Criteria criteria = Criteria.where("_id").in(id);  
  76.         if(null!=criteria){  
  77.             Query query = new Query(criteria);  
  78.             if(null!=query && this.queryOne(cls,query)!=null){  
  79.                 this.mongoTemplate.remove(this.queryOne(cls,query));  
  80.                 logger.info(cls+"[Mongo]deleteById:" + query);  
  81.             }  
  82.         }  
  83.     }  
  84.     /**@Description 
  85.      * 删除对象 
  86.      */  
  87.     public void delete(T t){  
  88.         this.mongoTemplate.remove(t);  
  89.         logger.info("[Mongo]delete:" + t);  
  90.     }  
  91.     /**@Description 
  92.      * 更新指定id的属性值 
  93.      */  
  94.     public void updateFirst(Class<T> cls,String id, String objName, String objValue){  
  95.         Criteria criteria = Criteria.where("_id").in(id);  
  96.         if(null!=criteria){  
  97.             Query query = new Query(criteria);  
  98.             if(null!=query && this.queryOne(cls,query)!=null){  
  99.                  Update update=new Update();  
  100.                  update.set(objName,objValue);  
  101.                  this.mongoTemplate.updateFirst(query,update,cls);  
  102.                  logger.info(cls+"[Mongo]updateFirst:query(" + query + "),update(" + update + ")");  
  103.             }  
  104.         }  
  105.     }  
  106.     /** 
  107.      *  Created on 2017年3月27日  
  108.      * <p>Discription:[查找更新,如果没有找到符合的记录,则将更新的记录插入库中]</p> 
  109.      */  
  110.     public void updateInser(Class<T> cls,Query query, Update update){  
  111.         logger.info(cls+"[Mongo]updateInser:query(" + query + "),update(" + update + ")");  
  112.         this.mongoTemplate.upsert(query, update, cls);  
  113.     }  
  114.   
  115. }  

2.5 然后在项目的dao层实现方法中,继承mongodb的实现类,如userDao

[java]  view plain  copy
  1. package com.mycompany.user.dao;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.data.mongodb.core.query.Query;  
  8. import org.springframework.data.mongodb.core.query.Update;  
  9. import org.springframework.stereotype.Repository;  
  10.   
  11. import com.mycompany.mongo.dao.MongoSupport;  
  12. import com.mycompany.user.entity.User;  
  13. import com.mycompany.user.mapper.UserMapper;  
  14. @Repository("userDao")  
  15. public class UserDaoImpl extends MongoSupport<User> implements UserDao{  
  16.   
  17.     @Autowired  
  18.     private UserMapper userMapper;  
  19.       
  20.     public User selectByUserId(Map<String,Object> map) {  
  21.         return userMapper.selectByUserId(map);  
  22.     }  
  23.     public void insertUser(User user) {  
  24.         userMapper.insertUser(user);  
  25.     }  
  26.   
  27.     /*保存一个对象*/  
  28.     @Override  
  29.     public void saveUser(User user){  
  30.         this.save(user);  
  31.     }  
  32.       
  33.     /*根据对象Id查找该对象*/  
  34.     @Override  
  35.     public User queryUserById(String id){  
  36.         return this.queryById(User.class, id);  
  37.     }  
  38.       
  39.     /*根据条件查询集合*/  
  40.     @Override  
  41.     public List<User> queryUserList(Query query){  
  42.         return this.queryList(User.class, query);  
  43.     }  
  44.       
  45.     /*通过条件查询单个实体*/  
  46.     @Override  
  47.     public User queryOneUser(Query query){  
  48.         return this.queryOne(User.class,query);  
  49.     }  
  50.       
  51.     /*分页查询*/  
  52.     @Override  
  53.     public List<User> getPage(Query query, int start, int size){  
  54.         return this.getPage(User.class, query, start, size);  
  55.     }  
  56.       
  57.     /*查询符合条件的记录总数*/  
  58.     @Override  
  59.     public Long getPageCount(Query query){  
  60.         return this.getPageCount(User.class, query);  
  61.     }  
  62.       
  63.     /*根据id删除对象*/  
  64.     @Override  
  65.     public void deleteById(String id){  
  66.         this.deleteById(User.class,id);  
  67.     }  
  68.       
  69.     /*删除对象*/  
  70.     @Override  
  71.     public void deleteUser(User user){  
  72.         this.delete(user);  
  73.     }  
  74.       
  75.     /*更新指定id的属性值*/  
  76.     @Override  
  77.     public void updateFirst(String id, String objName, String objValue){  
  78.         this.updateFirst(User.class, id, objName, objValue);  
  79.     }  
  80.       
  81.     /*查找更新*/  
  82.     @Override  
  83.     public void updateInser(Query query, Update update){  
  84.         this.updateInser(User.class, query, update);  
  85.     }  
  86.       
  87. }  

2.6 测试如下

[java]  view plain  copy
  1. package com.mycompany.mvc.quartz;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.data.mongodb.core.query.Criteria;  
  8. import org.springframework.data.mongodb.core.query.Query;  
  9. import org.springframework.stereotype.Service;  
  10.   
  11. import com.mycompany.user.dao.UserDao;  
  12. import com.mycompany.user.entity.User;  
  13.   
  14. @Service("jedisClusterTest")  
  15. public class JedisClusterTest {  
  16.       
  17.     @Autowired  
  18.     private UserDao userDao;  
  19.       
  20.     public void JedisClusterTestMain(){  
  21. //      jedisClusterClient.set("tStringCluster","helloCluster");  
  22. //      String tString  = jedisClusterClient.get("tStringCluster");  
  23. //      System.out.println("JedisTest.JedisTestMain():"+tString);  
  24.           
  25.         try {  
  26.             /*新增一个对象*/  
  27. //          User user = new User();  
  28. //          user.setUserName("test");  
  29. //          user.setDescription("password");  
  30. //          userDao.saveUser(user);  
  31. //          System.out.println("save:"+user);  
  32.               
  33.             /*根据id查找一个对象*/  
  34.             String id2 = "58e59fd9e4e0310210afac74";  
  35.             User user2 = userDao.queryUserById(id2);  
  36.             System.out.println("queryUserById:"+user2);  
  37.               
  38.             /*根据条件查询集合*/  
  39.             List<User> userList3 = new ArrayList<User>();  
  40.             Query query3 = new Query();  
  41.             Criteria criteria3 = Criteria.where("userName").is("test");  
  42.             query3.addCriteria(criteria3);  
  43.             userList3 = userDao.queryUserList(query3);  
  44.             System.out.println("queryUserList:"+userList3);  
  45.               
  46.             /*单循符合条件的单个*/  
  47.             Query query4 = new Query();  
  48.             Criteria criteria4 = Criteria.where("_id").is("58e59fd9e4e0310210afac74");  
  49.             query4.addCriteria(criteria4);  
  50.             User user4 = userDao.queryOneUser(query4);  
  51.               
  52.             /*查询符合条件的记录数*/  
  53.             Query query5 = new Query();  
  54.             Criteria criteria5 = Criteria.where("_id").is("58e59fd9e4e0310210afac74");  
  55.             query5.addCriteria(criteria5);  
  56.             Long count = userDao.getPageCount(query5);  
  57.             System.out.println("getPageCount:"+count);  
  58.               
  59.             /*分页查询*/  
  60.             List<User> userList6 = new ArrayList<User>();  
  61.             Query query6 = new Query();  
  62.             Criteria criteria6 = Criteria.where("userName").is("test");  
  63.             query6.addCriteria(criteria6);  
  64.             userList6 = userDao.getPage(query6,4,2);  
  65.             System.out.println("queryUserList:"+userList6);  
  66.               
  67.             /*删除*/  
  68. //          String id7 = "58e59fd9e4e0310210afac74";  
  69. //          userDao.deleteById(id7);  
  70.               
  71.             /*更新指定id的属性值*/  
  72.             String id8 = "58e5a017e4e0311fa0d501b7";  
  73.             userDao.updateFirst(id8,"userName","test2");  
  74.               
  75.         } catch (Exception e) {  
  76.             System.out.println(e.getStackTrace());  
  77.             e.printStackTrace();  
  78.         }  
  79.     }  
  80.   
  81. }  

三 MongoDB GridFS存取文件

[java]  view plain  copy
  1.     /*使用GridFS来新增一个文件*/  
  2.     GridFSBucket gridFSBucket = GridFSBuckets.create(testDb);  
  3.     String file = "src/main/resources/20150315172324.png";  
  4.     if(!new File(file).exists()){  
  5.         System.out.println("file is not exists");  
  6.     }  
  7.     String filename = "20150315172324.png";  
  8.     BasicDBObject pic = new BasicDBObject("_id",filename);  
  9.     GridFSFindIterable gridFSFindIterable = gridFSBucket.find(pic);  
  10.     if(gridFSFindIterable.first() == null){  
  11.         Object id = gridFSBucket.uploadFromStream(filename,new FileInputStream(file));  
  12.         /**files 
  13.          * 集合有八个属性 
  14. *"_id" : ObjectId("4f4608844f9b855c6c35e298"),    唯一id,可以是用户自定义的类型   
  15. *"filename" : "CPU.txt",     文件名   
  16. *"length" : 778,      文件长度   
  17. *"chunkSize" : 262144,    chunk的大小   
  18. *"uploadDate" : ISODate("2012-02-23T09:36:04.593Z")   上传时间   
  19. *"md5" : "e2c789b036cfb3b848ae39a24e795ca6",      文件的md5值   
  20. *"contentType" : "text/plain"     文件的MIME类型   
  21. *"meta" : null    文件的其它信息,默认是没有”meta”这个key,用户可以自己定义为任意BSON对象  
  22. *其中_id、filename、chunkSize、contentType、meta是可以自定义的 
  23. *其他如length,uploadDate和md5自己生成的。 
  24.          */  
  25.           
  26.         /**chunks集合有以下属性 
  27. * "_id" : ObjectId("4f4608844f9b855c6c35e299"),    chunk的id   
  28. * "files_id" : ObjectId("4f4608844f9b855c6c35e298"),  文件的id,对应fs.files中的对象,相当于fs.files集合的外键   
  29. * "n" : 0,     文件的第几个chunk块,如果文件大于chunksize的话,会被分割成多个chunk块   
  30. * "data" : BinData(0,"QGV...")     文件的二进制数据,这里省略了具体内容   
  31.          */  
  32.     }  
  33.       
  34.     /*查找文件*/  
  35.     BasicDBObject query  = new BasicDBObject("filename", filename);    
  36.     GridFSFile gridFSFile = gridFSBucket.find(query).first();    
  37.     System.out.println(gridFSFile.getFilename());  

0
 
0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值