config.properties
黃山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
#MongoDB setting mongo.host=127.0.0.1 mongo.port=27017 mongo.connectionsPerHost=100 mongo.threadsAllowedToBlockForConnectionMultiplier=50 mongo.connectTimeout=1000 mongo.maxWaitTime=1500 mongo.autoConnectRetry=true mongo.socketKeepAlive=true mongo.socketTimeout=0 mongo.slaveOk=true
spring_mongo.xml
<!--引入配置屬性文件 --> <context:property-placeholder location="classpath:db.properties" /> <!-- mongodb配置 --> <mongo:mongo id="mongo" replica-set="${mongo.replica-set}" write-concern="SAFE"> <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="1" write-timeout="0" write-fsync="true" /> </mongo:mongo> <!-- mongo的工廠,通過它來取得mongo實例,dbname為mongodb的數(shù)據(jù)庫名,沒有的話會自動創(chuàng)建 --> <mongo:db-factory id="mongoDbFactory" dbname="uba" mongo-ref="mongo" /> <!-- 讀寫分離級別配置 --> <!-- 首選主節(jié)點,大多情況下讀操作在主節(jié)點,如果主節(jié)點不可用,如故障轉(zhuǎn)移,讀操作在從節(jié)點。 --> <bean id="primaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.PrimaryPreferredReadPreference"></bean> <!-- 最鄰近節(jié)點,讀操作在最鄰近的成員,可能是主節(jié)點或者從節(jié)點。 --> <bean id="nearestReadPreference" class="com.mongodb.TaggableReadPreference.NearestReadPreference"></bean> <!-- 從節(jié)點,讀操作只在從節(jié)點, 如果從節(jié)點不可用,報錯或者拋出異常。存在的問題是secondary節(jié)點的數(shù)據(jù)會比primary節(jié)點數(shù)據(jù)舊。 --> <bean id="secondaryReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryReadPreference"></bean> <!-- 優(yōu)先從secondary節(jié)點進行讀取操作,secondary節(jié)點不可用時從主節(jié)點讀取數(shù)據(jù) --> <bean id="secondaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryPreferredReadPreference"></bean> <!-- mongodb的主要操作對象,所有對mongodb的增刪改查的操作都是通過它完成 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> <property name="readPreference" ref="primaryPreferredReadPreference" /> </bean> <!-- 映射轉(zhuǎn)換器,掃描back-package目錄下的文件,根據(jù)注釋,把它們作為mongodb的一個collection的映射 --> <mongo:mapping-converter base-package="dev.lzq.uba.mongo.model" /> <!-- mongodb bean的倉庫目錄,會自動掃描擴展了MongoRepository接口的接口進行注入 --> <mongo:repositories base-package="dev.lzq.uba.mongo.dao" />
entity
@Document(collection = "user") public class User { @Id private int id; private String name; private int age; private String city; private String mote; public int getId() { return id; } public void setId(int id) { this.id = id; } 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 getCity() { return city; } public void setCity(String city) { this.city = city; } public String getMote() { return mote; } public void setMote(String mote) { this.mote = mote; } }
dao配置
public interface MGUserDao extends MongoRepository<User, ObjectId> { /** * 方法名的嚴格遵守規(guī)定 * @param age * @param page * @return */ public Page<User> findByAgeGreaterThan(int age, Pageable page); /** * 有@Query聲明查詢, 方法名不需要嚴格遵守規(guī)定 * @param name * @param ageFrom * @param ageTo * @param pageable * @return */ @Query("{'name':{'$regex':?0}, 'age': {'$gte':?1,'$lte':?2}}") public Page<User> findByNameAndAgeRange(String name, int ageFrom, int ageTo, Pageable pageable); @Query("{?0:?1}") public List<User> findByAttribute(String key, String value); }
dao層的使用
MongoRepository實現(xiàn)了的只是最基本的增刪改查的功能,要想增加額外的查詢方法,可以按照以下規(guī)則定義接口的方法。自定義查詢方法,格式為“findBy+字段名+方法后綴”,方法傳進的參數(shù)即字段的值,此外還支持分頁查詢,通過傳進一個Pageable對象,返回Page集合。 例如:
//查詢大于age的數(shù)據(jù) public Page<Product> findByAgeGreaterThan(int age,Pageable page) ;
下面是支持的查詢類型,每三條數(shù)據(jù)分別對應:(方法后綴,方法例子,mongodb原生查詢語句)
GreaterThan(大于) findByAgeGreaterThan(int age) {"age" : {"$gt" : age}} LessThan(小于) findByAgeLessThan(int age) {"age" : {"$lt" : age}} Between(在...之間) findByAgeBetween(int from, int to) {"age" : {"$gt" : from, "$lt" : to}} IsNotNull, NotNull(是否非空) findByFirstnameNotNull() {"age" : {"$ne" : null}} IsNull, Null(是否為空) findByFirstnameNull() {"age" : null} Like(模糊查詢) findByFirstnameLike(String name) {"age" : age} ( age as regex) (No keyword) findByFirstname(String name) {"age" : name} Not(不包含) findByFirstnameNot(String name) {"age" : {"$ne" : name}} Near(查詢地理位置相近的) findByLocationNear(Point point) {"location" : {"$near" : [x,y]}} Within(在地理位置范圍內(nèi)的) findByLocationWithin(Circle circle) {"location" : {"$within" : {"$center" : [ [x, y], distance]}}} Within(在地理位置范圍內(nèi)的) findByLocationWithin(Box box) {"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}
盡管以上查詢功能已經(jīng)很豐富,但如果還不能滿足使用情況的話可以用一下方法---基于mongodb原本查詢語句的查詢方式。
例一:在原接口中加入,注釋Query里面的就是mongodb原來的查詢語法,我們可以定義傳進來的查詢參數(shù),通過坐標定義方法的參數(shù)。
@Query("{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}") public Page<Product> findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);
例二:還可以在后面指定要返回的數(shù)據(jù)字段,如上面的例子修改如下,則只通過person表里面的name和age字段構建person對象。
@Query(value="{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}",fields="{ 'name' : 1, 'age' : 1}") public Page<Product> findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);
新聞標題:【MongoDB】spring-data-mongo配置
本文鏈接:http://chinadenli.net/article4/geojoe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、網(wǎng)站制作、外貿(mào)網(wǎng)站建設、自適應網(wǎng)站、建站公司、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)