Spring整合MongoDB




版本:

spring:4.1.3.RELEASE

mongo-java-driver.version:3.4.1

spring-data-mongodb.version:1.7.0.RELEASE


配置:

1、pom.xml中添加核心依赖(两个)

+++++++++++++++++++++++++++++++++++++++++++++++++++++

1
2
3
4
5
6
7
8
9
10
11
12
                 <!-- mongo-java-dirver -->
         <dependency>
             <groupId>org.mongodb</groupId>
             <artifactId>mongo-java-driver</artifactId>
             <version> 3.4 . 1 </version>
         </dependency>
         <!-- spring-data-mongodb -->
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-mongodb</artifactId>
             <version> 1.7 . 0 .RELEASE</version>
         </dependency>

++++++++++++++++++++++++++++++++++++++++++++++++++++++

完整pom.xml文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<project xmlns= "http://maven.apache.org/POM/4.0.0"  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
     <modelVersion> 4.0 . 0 </modelVersion>
     <groupId>com.fwmagic.mongo</groupId>
     <artifactId>fwmagic-mongo</artifactId>
     <version> 1.0 . 0 -SNAPSHOT</version>
 
     <properties>
         <junit.version> 4.12 </junit.version>
         <spring.version> 4.1 . 3 .RELEASE</spring.version>
         <fastjson.version> 1.2 . 15 </fastjson.version>
         <slf4j.version> 1.6 . 4 </slf4j.version>
         <joda-time.version> 2.5 </joda-time.version>
         <commons-lang3.version> 3.3 . 2 </commons-lang3.version>
         <commons-io.version> 1.3 . 2 </commons-io.version>
         <mongo-java-driver.version> 3.4 . 1 </mongo-java-driver.version>
         <spring-data-mongodb.version> 1.7 . 0 .RELEASE</spring-data-mongodb.version>
 
         <env>dev</env>
         <project.build.sourceEncoding>UTF- 8 </project.build.sourceEncoding>
         <maven.compiler.encoding>UTF- 8 </maven.compiler.encoding>
     </properties>
 
     <dependencies>
         <!--junit -->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit.version}</version>
         </dependency>
 
         <!-- fastjson -->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>${fastjson.version}</version>
         </dependency>
 
         <!-- Spring -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context-support</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-beans</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-aspects</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <!-- slf4j日志 -->
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j.version}</version>
         </dependency>
         <!-- Apache工具组件 -->
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>${commons-lang3.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-io</artifactId>
             <version>${commons-io.version}</version>
         </dependency>
         <!-- 时间操作组件 -->
         <dependency>
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>
             <version>${joda-time.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
             <version> 2.0 </version>
         </dependency>
         <!-- mongo-java-dirver -->
         <dependency>
             <groupId>org.mongodb</groupId>
             <artifactId>mongo-java-driver</artifactId>
             <version>${mongo-java-driver.version}</version>
         </dependency>
         <!-- spring-data-mongodb -->
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-mongodb</artifactId>
             <version>${spring-data-mongodb.version}</version>
             <exclusions>
                 <exclusion>
                     <artifactId>slf4j-api</artifactId>
                     <groupId>org.slf4j</groupId>
                 </exclusion>
             </exclusions>
         </dependency>
     </dependencies>
     <build>
         <plugins>
             <!-- java编译插件 -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version> 3.2 </version>
                 <configuration>
                     <source> 1.7 </source>
                     <target> 1.7 </target>
                     <encoding>UTF- 8 </encoding>
                 </configuration>
             </plugin>
             <!-- 配置Tomcat插件 -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <version> 2.6 </version>
                 <configuration>
                     <archiveClasses> true </archiveClasses>
                     <packagingExcludes>WEB-INF/classes/**</packagingExcludes>
                     <webResources>
                         <resource>
                             <directory>src/main/webapp/WEB-INF</directory>
                             <includes>
                                 <include>applicationContext.xml</include>
                             </includes>
                             <filtering> true </filtering>
                             <targetPath>WEB-INF</targetPath>
                         </resource>
                     </webResources>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version> 2.7 . 1 </version>
             </plugin>
         </plugins>
     </build>
</project>


2、mongo.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
####################################################
###MongoDB configuration
####################################################
mongo.host=localhost
mongo.port= 27017
mongo.dbname=demodb
mongo.username=admin
mongo.password= 123456
#一个线程变为可用的最大阻塞数
mongo.connectionsPerHost= 8
#线程队列数,它与以上面connectionsPerHost值相乘的结果就是线程队列最大值
mongo.threadsAllowedToBlockForConnectionMultiplier= 4
#连接超时时间(毫秒) 
mongo.connectTimeout= 1500
#最大等待时间
mongo.maxWaitTime= 1500
#自动重连
mongo.autoConnectRetry= true
#scoket保持活动
mongo.socketKeepAlive=  true
#scoket超时时间
mongo.socketTimeout= 1500
#读写分离
mongo.slaveOk= true


3、applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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:p= "http://www.springframework.org/schema/p"
     xmlns:context= "http://www.springframework.org/schema/context"
     xmlns:mvc= "http://www.springframework.org/schema/mvc"  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.xsd
         http: //www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
         http: //www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
         http: //www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
         
     <!--配置service的包扫描,自动注入Service -->
     <context:component-scan base- package = "com.fwmagic"  />
 
     <!-- 使用spring自带的占位符替换功能 -->
     <bean
         class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
         <!-- 允许JVM参数覆盖 -->
         <property name= "systemPropertiesModeName"  value= "SYSTEM_PROPERTIES_MODE_OVERRIDE"  />
         <!-- 忽略没有找到的资源文件 -->
         <property name= "ignoreResourceNotFound"  value= "true"  />
         <!-- 配置资源文件 -->
 
         <property name= "locations" >
             <list>
                 <value>classpath:mongo.properties</value>
                 <value>classpath:log4j.properties</value>
             </list>
         </property>
     </bean>
     
         <!--credentials的配置形式是:用户名:密码@默认数据库 -->
     <mongo:mongo-client id= "mongoClient"  host= "${mongo.host}"
         port= "${mongo.port}"  credentials= "${mongo.username}:${mongo.password}@${mongo.dbname}" >
         <mongo:client-options write-concern= "SAFE"
             connections-per-host= "${mongo.connectionsPerHost}"
             threads-allowed-to-block- for -connection-multiplier= "${mongo.threadsAllowedToBlockForConnectionMultiplier}"
             connect-timeout= "${mongo.connectTimeout}"  max-wait-time= "${mongo.maxWaitTime}"
             socket-timeout= "${mongo.socketTimeout}"  />
     </mongo:mongo-client>
 
     <mongo:db-factory id= "mongoDbFactory"  dbname= "${mongo.dbname}"
         mongo-ref= "mongoClient"  />
 
     <bean id= "mongoTemplate"  class = "org.springframework.data.mongodb.core.MongoTemplate" >
         <constructor-arg name= "mongoDbFactory"  ref= "mongoDbFactory"  />
     </bean>
</beans>


单元测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package  com.fwmagic.dao;
 
import  java.util.Date;
import  java.util.List;
 
import  org.junit.Test;
import  org.junit.runner.RunWith;
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.data.mongodb.core.MongoTemplate;
import  org.springframework.data.mongodb.core.query.Criteria;
import  org.springframework.data.mongodb.core.query.CriteriaDefinition;
import  org.springframework.data.mongodb.core.query.Query;
import  org.springframework.data.mongodb.core.query.Update;
import  org.springframework.test.context.ContextConfiguration;
import  org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import  com.fwmagic.pojo.Notice;
 
@RunWith (SpringJUnit4ClassRunner. class )
@ContextConfiguration ( "classpath:spring/applicationContext*.xml" )
public  class  NoticeDAOTest {
 
     @Autowired
     private  NoticeDAO dao;
     
     /**
      * 查询所有文档
      */
     @Test
     public  void  testList() {
         Query query =  new  Query();
         List<Notice> notice = dao.list(query, Notice. class );
         for  (Notice n : notice) {
             System.out.println(n);
         }
     }
 
     /**
      * 插入文档
      */
     @Test
     public  void  testInsert(){
         Notice notice =  new  Notice();
         notice.setSiteId( 7 );
         notice.setCreator( "diaochan" );
         notice.setTitle( "今天星期一" );
         notice.setUpdateTime( new  Date());
         dao.insert(notice);
     }
     
     /**
      * 更新文档
      */
     @Test
     public  void  testUpdate(){
         Criteria criteria =  new  Criteria();
         criteria.and( "creator" ).is( "zhaojun" );
         Query query =  new  Query(criteria);
         dao.update(query, Update.update( "createTime" new  Date()), Notice. class );
     }
     
     /**
      * 删除一行文档
      */
     @Test
     public  void  testRemove(){
         Criteria criteria =  new  Criteria();
         criteria.and( "creator" ).is( "zhaojun" );
         Query query =  new  Query(criteria);
         dao.remove(query, Notice. class );
     }
     
     //未完待续……
}


NoticeDAO.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package  com.fwmagic.dao;
 
import  java.util.List;
 
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.data.mongodb.core.MongoTemplate;
import  org.springframework.data.mongodb.core.query.Query;
import  org.springframework.data.mongodb.core.query.Update;
import  org.springframework.stereotype.Repository;
 
import  com.fwmagic.pojo.Notice;
import  com.mongodb.WriteResult;
 
@Repository
public  class  NoticeDAO  implements  BaseDAO<Notice>{
 
     @Autowired
     private  MongoTemplate mt;
     
     @Override
     public  List<Notice> list(Query query, Class<Notice> entityClass) {
         return  mt.find(query, entityClass);
     }
 
     @Override
     public  Notice findOne(Query query, Class<Notice> entityClass) {
         return  mt.findOne(query, entityClass);
     }
     
     @Override
     public  void  insert(Notice notice){
         mt.insert(notice);
     }
     
     @Override
     public  WriteResult update(Query query, Update update, Class<?> entityClass){
         return  mt.updateFirst(query, update, entityClass);
     }
     
     @Override
     public  void  remove(Query query, Class<?> entityClass){
         mt.remove(query, entityClass);
     }
}


完整demo请移步此处查看.



本文转自 兴趣e族 51CTO博客,原文链接:http://blog.51cto.com/simplelife/1932408

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值