最近項目上有一個需求要用到MongoDB,之前小編從未用過,只是瞭解,所以使用期間走了些許彎路,藉此跟大家分享一下。
引入
首先,跟尚未入門的童鞋通俗地介紹一下什麼是Spring,什麼是MongoDB。
什麼是Spring?
通俗來講,Spring是用於盛裝應用啟動後所要用的到的對象的容器,便於對對象進行統一管理。
什麼是MongoDB?
MongoDB是一款NoSQL數據庫,區別於存儲形如Excel的表格數據的關係型數據庫,NoSQL數據庫一般儲存的是對象
MongoDB的一個數據庫中可以有若干個Collection(相當於關係型數據庫的表),一個Collection中可以儲存若干個Document(相當於關係型數據庫的行)
MongoDB的每一個Document是一種與json神似的bson數據。
MongoDb目前不支持事務管理。
走過的彎路
我一開始的設計思路是:
做一個配置文件用來存儲Mongo的連接、認證等信息。
做一個工具類來讀取配置信息、創建客戶端實例,並實現CRUD操作。
代碼結構:
public final class MongoUtil {
private MongoUtil() {}
// 創建客戶端
private static MongoClient createMongoDbClient() {
......
}
// 獲取數據庫
private static MongoDatabase getMongoDb() {
......
}
// 獲取Collection
private static MongoCollection getCollection(String collectionName) {
......
}
// 以下是CRUD(增刪改查)實現
......
}
誠然,這種做法是沒有錯的,畢竟MongoDB與Spring的集成也是基於以上方法來實現的,相當於是一種實現原理吧。
回頭是岸
從瞭解MongoDb的特性及其數據存儲結構到設計並實現該工具類用了差不多一天時間。。。
後來我猛地想起,或許Spring官方早有現成的Spring-MongoDb集成包呢?我查找了一下,答案是肯定的。
以下是MongoDB 3.0以上版本與Spring整合的示例:
pom.xml
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.8.4.RELEASE</version>
</dependency>
spring.xml
<import resource="classpath:spring-mongo.xml" />
mongodb.properties
mongo.host=x.x.x.x
mongo.port=27017
mongo.credentials=testuser:123456@testdb
#mongo.dbName=testdb
#mongo.userName=testuser
#mongo.passWord=123456
mongo.options.connectionsPerHost=20
mongo.options.threadsAllowedToBlockForConnectionMultiplier=4
mongo.options.connectTimeout=1000
mongo.options.maxWaitTime=1500
mongo.options.socketKeepAlive=true
mongo.options.socketTimeout=1500
spring-mongo.xml
<!--連接池配置 -->
<mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}" credentials="${mongo.credentials}">
<mongo:client-options connections-per-host="${mongo.options.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.options.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.options.connectTimeout}"
max-wait-time="${mongo.options.maxWaitTime}"
socket-keep-alive="${mongo.options.socketKeepAlive}"
socket-timeout="${mongo.options.socketTimeout}" />
</mongo:mongo-client>
<!-- mongo的工廠,通過它來取得mongo實例,dbname為mongodb的數據庫名,沒有的話會自動創建 -->
<mongo:db-factory id="mongoDbFactory" mongo-ref="mongoClient" />
<!-- mongodb的主要操作對象,所有對mongodb的增刪改查的操作都是通過它完成 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
</beans>
做完以上的配置之後,就可以利用上面配置的mongoTemplate進行MongoDB的CRUD操作了,例如:
public class UserDao {
@Autowired
private MongoOperations mongoOperations;
public void addUser(User user) {
mongoOperations.insert(user, "user");
}
....
}
主要是注入MongoOperations這個對象來使用其中已經實現的方法,因為MongoDB不支持事務控制,所以將其作為工具方法使用還是作為Dao使用都是可以的。
作者:頭條號 | 程序界一帥
版權聲明:轉載請註明原始出處