小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Spring Data MongoDB 一:入門篇(環(huán)境搭建、簡單的CRUD操作)

 WindySky 2016-05-03

一.簡介

     Spring Data  MongoDB 項(xiàng)目提供與MongoDB文檔數(shù)據(jù)庫的集成。Spring Data MongoDB POJO的關(guān)鍵功能區(qū)域?yàn)橹行牡哪P团cMongoDB的DBCollection輕松地編寫一個(gè)存儲(chǔ)庫交互數(shù)據(jù)訪問。

二.Spring Data MongoDB的配置以及下載對(duì)應(yīng)的Jar

  1.安裝MongoDb數(shù)據(jù)庫,我們?cè)谏弦黄鸵呀?jīng)介紹過了,這邊就不在介紹了,MongoDB 入門(安裝與配置)

   2.下載spring的spring-data的子項(xiàng)目兩個(gè)jar,分別是spring-data-commons和spring-data-mongodb

           http://projects./spring-data-mongodb/

           我這邊下載是兩個(gè)jar分別是:

          spring-data-commons-1.7.2.RELEASE.jar

         spring-data-mongodb-1.4.2.RELEASE.jar

   3.下載mongoDb的Java驅(qū)動(dòng)jar包

       http://central./maven2/org/mongodb/mongo-java-driver/

       這邊有很多版本,下載自己對(duì)應(yīng)得版本,我下載是:

        mongo-java-driver-2.9.3.jar

         



   4.用Java測(cè)試一下MongoDB是否能正常連接

  1. public class TestMongodb {  
  2.     @Test   
  3.     public void testMongodb()  
  4.     {  
  5.       try{     
  6.             // 連接到 mongodb 服務(wù)  
  7.              Mongo mongo = new Mongo("127.0.0.1", 27017);    
  8.             //根據(jù)mongodb數(shù)據(jù)庫的名稱獲取mongodb對(duì)象 ,  
  9.              DB db = mongo.getDB( "test" );  
  10.              Set<String> collectionNames = db.getCollectionNames();    
  11.                // 打印出test中的集合    
  12.               for (String name : collectionNames) {    
  13.                     System.out.println("collectionName==="+name);    
  14.               }    
  15.                
  16.           }catch(Exception e){  
  17.              e.printStackTrace();  
  18.           }  
  運(yùn)行能獲取test數(shù)據(jù)庫下的集合,說明能正常連接數(shù)據(jù)庫

     

5.Spring的配置文件

   1)applicationContext-mongo.xml

   

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www./schema/beans"  
  3.     xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:aop="http://www./schema/aop"  
  4.     xmlns:tx="http://www./schema/tx" xmlns:util="http://www./schema/util"  
  5.     xmlns:context="http://www./schema/context" xmlns:mongo="http://www./schema/data/mongo"  
  6.     xsi:schemaLocation="http://www./schema/beans http://www./schema/beans/spring-beans-3.0.xsd  
  7.         http://www./schema/aop http://www./schema/aop/spring-aop-3.0.xsd  
  8.     http://www./schema/tx http://www./schema/tx/spring-tx-3.0.xsd  
  9.     http://www./schema/util http://www./schema/util/spring-util-3.0.xsd  
  10.     http://www./schema/data/mongo http://www./schema/data/mongo/spring-mongo-1.0.xsd  
  11.     http://www./schema/context http://www./schema/context/spring-context-3.0.xsd">  
  12.     <context:component-scan base-package="com.mongo" />  
  13.     <!-- 獲取配置資源 -->  
  14.     <context:property-placeholder location="classpath:jdbc.properties" />  
  15.       
  16.     <bean class="cn.mongo.util.SpringContextUtil"></bean>  
  17.       
  18.     <mongo:mongo id="mongo"  replica-set="${mongo.replicaSet}">  
  19.       <!--  
  20.          connections-per-host: 每個(gè)主機(jī)答應(yīng)的連接數(shù)(每個(gè)主機(jī)的連接池大?。?dāng)連接池被用光時(shí),會(huì)被阻塞住   
  21.          max-wait-time: 被阻塞線程從連接池獲取連接的最長等待時(shí)間(ms)  
  22.          connect-timeout:在建立(打開)套接字連接時(shí)的超時(shí)時(shí)間(ms)  
  23.          socket-timeout:套接字超時(shí)時(shí)間;該值會(huì)被傳遞給Socket.setSoTimeout(int)  
  24.          slave-ok:指明是否答應(yīng)驅(qū)動(dòng)從次要節(jié)點(diǎn)或者奴隸節(jié)點(diǎn)讀取數(shù)據(jù)  
  25.          -->  
  26.     <mongo:options  
  27.         connections-per-host="${mongo.connectionsPerHost}"  
  28.         threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"  
  29.         connect-timeout="${mongo.connectTimeout}"   
  30.         max-wait-time="${mongo.maxWaitTime}"  
  31.         auto-connect-retry="${mongo.autoConnectRetry}"   
  32.         socket-keep-alive="${mongo.socketKeepAlive}"  
  33.         socket-timeout="${mongo.socketTimeout}"  
  34.         slave-ok="${mongo.slaveOk}"  
  35.         write-number="${mongo.writeNumber}"  
  36.         write-timeout="${mongo.riteTimeout}"  
  37.         write-fsync="${mongo.writeFsync}"/>  
  38.     </mongo:mongo>  
  39.        <!-- 設(shè)置使用的數(shù)據(jù)庫 名-->  
  40.       <mongo:db-factory dbname="test" mongo-ref="mongo"/>  
  41.       <!-- mongodb的模板 -->  
  42.      <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
  43.         <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>  
  44.      </bean>  
  45. </beans>  
  

 2)jdbc.properties

  1. mongo.replicaSet=127.0.0.1:27017  
  2. mongo.connectionsPerHost=8  
  3. mongo.threadsAllowedToBlockForConnectionMultiplier=4  
  4. mongo.connectTimeout=1000  
  5. mongo.maxWaitTime=1500  
  6. mongo.autoConnectRetry=true  
  7. mongo.socketKeepAlive=true  
  8. mongo.socketTimeout=1500  
  9. mongo.slaveOk=true  
  10. mongo.writeNumber=1  
  11. mongo.riteTimeout=0  
  12. mongo.writeFsync=true  
說明:

 我們可以上官方網(wǎng)查看文檔http://docs./spring-data/data-mongo/docs/1.7.0.RC1/reference/html/#mongodb-connectors,這里面有說明怎么配置

   

三.Spring 實(shí)現(xiàn)MongoDB的CRUD操作

    1.實(shí)現(xiàn)一個(gè)基礎(chǔ)接口,是比較通用的 MongoBase.java類

  1. public interface MongoBase<T> {  
  2.     //添加  
  3.     public void insert(T object,String collectionName);    
  4.     //根據(jù)條件查找  
  5.     public T findOne(Map<String,Object> params,String collectionName);    
  6.     //查找所有  
  7.     public List<T> findAll(Map<String,Object> params,String collectionName);    
  8.     //修改  
  9.     public void update(Map<String,Object> params,String collectionName);   
  10.     //創(chuàng)建集合  
  11.     public void createCollection(String collectionName);  
  12.     //根據(jù)條件刪除  
  13.     public void remove(Map<String,Object> params,String collectionName);  
  14.       
  15. }  
  

   2.實(shí)現(xiàn)一個(gè)實(shí)體類,我這邊實(shí)現(xiàn)了User類

  @Document注解,表示這個(gè)POJO最終要持久化為MongoDB中的document


  1. @Document  
  2. public class User implements Serializable {  
  3.     /** 
  4.      *  
  5.      */  
  6.     private static final long serialVersionUID = 1L;  
  7.     private String id;  
  8.     private String name;  
  9.     private int age;  
  10.     private String password;  
  11.       
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.     public int getAge() {  
  19.         return age;  
  20.     }  
  21.     public void setAge(int age) {  
  22.         this.age = age;  
  23.     }  
  24.     public String getPassword() {  
  25.         return password;  
  26.     }  
  27.     public void setPassword(String password) {  
  28.         this.password = password;  
  29.     }  
  30.     public String getId() {  
  31.         return id;  
  32.     }  
  33.     public void setId(String id) {  
  34.         this.id = id;  
  35.     }  
  36.       
  37.       
  38.   
  39. }  

 3.實(shí)現(xiàn)UserDao類,就是實(shí)現(xiàn)User自己操作數(shù)據(jù)庫的接口,這個(gè)UserDao也繼承了MongoBase接口,我們這邊UserDao沒實(shí)現(xiàn)其他額外的接口

    

  1. public interface UserDao extends MongoBase<User>{  
  2.   
  3. }  

 4.實(shí)現(xiàn)UserDaoImpl具體類,這邊是實(shí)際操作數(shù)據(jù)庫

     

  1. @Repository("userDaoImpl")  
  2. public class UserDaoImpl implements UserDao {  
  3.       
  4.     @Resource  
  5.     private MongoTemplate mongoTemplate;  
  6.   
  7.     @Override  
  8.     public void insert(User object,String collectionName) {  
  9.         mongoTemplate.insert(object, collectionName);  
  10.     }  
  11.   
  12.     @Override  
  13.     public User findOne(Map<String,Object> params,String collectionName) {  
  14.          return mongoTemplate.findOne(new Query(Criteria.where("id").is(params.get("id"))), User.class,collectionName);    
  15.     }  
  16.   
  17.     @Override  
  18.     public List<User> findAll(Map<String,Object> params,String collectionName) {  
  19.         List<User> result = mongoTemplate.find(new Query(Criteria.where("age").lt(params.get("maxAge"))), User.class,collectionName);  
  20.         return result;  
  21.     }  
  22.   
  23.     @Override  
  24.     public void update(Map<String,Object> params,String collectionName) {  
  25.         mongoTemplate.upsert(new Query(Criteria.where("id").is(params.get("id"))), new Update().set("name", params.get("name")), User.class,collectionName);  
  26.     }  
  27.   
  28.     @Override  
  29.     public void createCollection(String name) {  
  30.         mongoTemplate.createCollection(name);  
  31.     }  
  32.   
  33.   
  34.     @Override  
  35.     public void remove(Map<String, Object> params,String collectionName) {  
  36.         mongoTemplate.remove(new Query(Criteria.where("id").is(params.get("id"))),User.class,collectionName);  
  37.     }  

  說明:

       我們可以上官方網(wǎng)查看文檔http://docs./spring-data/data-mongo/docs/1.7.0.RC1/reference/html/#mongodb-connectors

        mongoTemplate.upsert

             

              這邊update里面提供了很多功能,可以根據(jù)條件進(jìn)行修改,Criteria這個(gè)類也提供了where 、and、lt等,我們?cè)诓樵兡挲g大于30的查出來,mongoTemplate.find(new Query(Criteria.where("age").lt(params.get("maxAge"))), User.class,collectionName);Criteria還很多

   如圖所示:

                

   4.實(shí)現(xiàn)測(cè)試類

      我們這邊為了節(jié)省時(shí)間,就沒寫服務(wù)類,我們直接調(diào)用dao就可以了,實(shí)現(xiàn)了TestUser.java類

      1)添加并根據(jù)條件查找列表

         

  1. public class TestUser {  
  2.       
  3.     private static UserDao userDaoImpl;  
  4.     private static  ClassPathXmlApplicationContext  app;  
  5.     private static String collectionName;  
  6.     @BeforeClass    
  7.     public static void initSpring() {   
  8.         try {         
  9.          app = new ClassPathXmlApplicationContext(new String[] { "classpath:applicationContext-mongo.xml",    
  10.                 "classpath:spring-dispatcher.xml" });    
  11.         userDaoImpl = (UserDao) app.getBean("userDaoImpl");   
  12.         collectionName ="users";  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.            }   
  17.       
  18.         @Test   
  19.         public void testAdd()  
  20.         {  
  21.           
  22.             //添加一百個(gè)user  
  23.             for(int i=0;i<100;i++){  
  24.                 User user =new User();  
  25.                 user.setId(""+i);  
  26.                 user.setAge(i);  
  27.                 user.setName("zcy"+i);  
  28.                 user.setPassword("zcy"+i);  
  29.                 userDaoImpl.insert(user,collectionName);  
  30.             }  
  31.             Map<String,Object> params=new HashMap<String,Object>();  
  32.             params.put("maxAge", 50);  
  33.             List<User> list=userDaoImpl.findAll(params,collectionName);  
  34.             System.out.println("user.count()=="+list.size());  
  35.         }  
   運(yùn)行一下,我們能正常查找年齡大于50的

        

    2)根據(jù)ID進(jìn)行修改

         

  1.            @Test   
  2. ublic void testUdate(){  
  3. Map<String,Object> params=new HashMap<String,Object>();  
  4. params.put("id", "1");  
  5. User user=userDaoImpl.findOne(params, collectionName);  
  6. System.out.println("user.name==="+user.getName());  
  7. System.out.println("=============update==================");  
  8. params.put("name", "hello");  
  9. userDaoImpl.update(params, collectionName);  
  10.  user=userDaoImpl.findOne(params, collectionName);  
  11. System.out.println("user.name==="+user.getName());  

     3)根據(jù)ID刪除對(duì)應(yīng)的數(shù)據(jù)

         

  1.             @Test   
  2. ublic void testRemove(){  
  3. Map<String,Object> params=new HashMap<String,Object>();  
  4. params.put("id", "2");  
  5. userDaoImpl.remove(params, collectionName);  
  6. User user=userDaoImpl.findOne(params, collectionName);  
  7. System.out.println("user=="+user);  

   



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多