摘要:每個(gè)條件必須引用一個(gè)屬性,并且還可以指定一種比較操作。如果省略比較操作符的話,那么這暗指是一種相等比較操作。
Spring-data對(duì)MongoDB進(jìn)行了很好的支持,接下來(lái)就講解一下關(guān)于Spring對(duì)MongoDB的配置和一些正常的使用
我下面的工程使用的是Spring的Java配置的方式和Maven構(gòu)建
具體的工程代碼大家可以訪問(wèn)我的Github地址:https://github.com/zoeminghong/springmvc-javaconfig
①M(fèi)ongoDB的必要配置package springmvc.rootconfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoClientFactoryBean; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import com.mongodb.Mongo; @Configuration // 啟用MongoDB的Repository功能,會(huì)對(duì)其Repositories自動(dòng)掃描 @EnableMongoRepositories(basePackages = "springmvc.orders.db") public class MongoConfig { // MongoClient配置 @Bean public MongoClientFactoryBean mongo() { MongoClientFactoryBean mongo = new MongoClientFactoryBean(); mongo.setHost("localhost"); //MongoCredential credential=MongoCredential.createCredential(env.getProperty("mongo.username"), "OrdersDB",env.getProperty("mongo.password").toCharArray()); // mongo.setCredentials(new MongoCredential[]{credential}); //還可以對(duì)端口進(jìn)行配置 return mongo; } // Mongo Template配置 @Bean public MongoOperations mongoTemplate(Mongo mongo) { //OrdersDB就是Mongo的數(shù)據(jù)庫(kù) return new MongoTemplate(mongo, "OrdersDB"); } }
為了訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,我們可能還需要帳號(hào)密碼
MongoCredential credential=MongoCredential.createCredential(env.getProperty("mongo.username"), "OrdersDB",env.getProperty("mongo.password").toCharArray()); mongo.setCredentials(new MongoCredential[]{credential});②為模型添加注解
package springmvc.bean; import java.util.Collection; import java.util.LinkedHashSet; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; //這是文檔 @Document public class Order { //指定ID @Id private String id; //為域重命名 @Field("client") private String customer; private String type; private Collection- items=new LinkedHashSet
- (); public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCustomer() { return customer; } public void setCustomer(String customer) { this.customer = customer; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Collection
- getItems() { return items; } public void setItems(Collection
- items) { this.items = items; } }
package springmvc.bean; public class Item { private Long id; private Order order; private String product; private double price; private int quantity; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } public String getProduct() { return product; } public void setProduct(String product) { this.product = product; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } }
注解 | 描述 |
---|---|
@Document | 標(biāo)示映射到mongoDB文檔上的領(lǐng)域?qū)ο?/td> |
@ID | 標(biāo)示某個(gè)為ID域 |
@DbRef | 標(biāo)示某個(gè)域要引用其他的文檔,這個(gè)文檔有可能位于另外一個(gè)數(shù)據(jù)庫(kù)中 |
@Field | 為文檔域指定自定義的元數(shù)據(jù) |
@Version | 標(biāo)示某個(gè)屬性用作版本域 |
③使用MongoTemplate訪問(wèn)MongoDB若不使用@Field注解,域名就與Java屬性相同
上面之所以Item的Java類為什么沒有@Document注解,是因?yàn)槲覀儾粫?huì)多帶帶想Item持久化為文檔
package springmvc.web; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import springmvc.bean.Order; import springmvc.orders.db.OrderRepository; @Controller public class HomeController { @Autowired MongoOperations mongo; @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET) public String index() { long orderCount=mongo.getCollection("order").count(); System.out.println(orderCount); // Order order = new Order(); // order.setId("1"); // order.setCustomer("gg"); // order.setType("2"); //第二個(gè)參數(shù)是文檔存儲(chǔ)的名稱 // mongo.save(order,"order"); // String orderId="1"; // Order order=mongo.findById(orderId, Order.class); // System.out.println(order.getCustomer()); return "index"; } }
在這里我們將MongoTemplate注入到一個(gè)類型為MongoOperations的屬性中。MongoOperations是MongoTemplate所實(shí)現(xiàn)的接口,MongoOperations中存在很多文檔操作方法
MongoOperations其實(shí)已經(jīng)能滿足很多需求了
如果還沒有滿足你的需求,接下來(lái)我就介紹一下,如何編寫MongoDB Repository
編寫MongoDB Repositorypackage springmvc.orders.db; import java.util.List; import org.springframework.data.mongodb.repository.MongoRepository; import springmvc.bean.Order; public interface OrderRepository extends MongoRepository{ List findByCustomer(String c); List findByCustomerLike(String c); List findByCustomerAndType(String c, String t); List findByCustomerLikeAndType(String c, String t); }
看到這里,大家有沒有發(fā)現(xiàn)package的地址就是我們剛才@EnableMongoRepositories(basePackages = "springmvc.orders.db")的配置
MongoRepository接口有兩個(gè)參數(shù),第一個(gè)是帶有@Document注解的對(duì)象類型,也就是該Repository要處理的類型。第二個(gè)參數(shù)是帶有@Id注解的屬性類型
OrderRepository繼承了MongoRepository中很多自帶的方法
方法 | 描述 |
---|---|
long count() | 返回指定Repository類型的文檔數(shù)量 |
void delete(Iterable extends T>) | 刪除與指定對(duì)象關(guān)聯(lián)的所有文檔 |
void delete(T) | 刪除與指定對(duì)象關(guān)聯(lián)的文檔 |
void delete(ID) | 根據(jù)ID刪除某一個(gè)文檔 |
void deleteAll(); | 刪除指定Repository類型的所有文檔 |
boolean exists(Object) | 如果存在與指定對(duì)象相關(guān)聯(lián)的文檔,則返回true |
boolean exists(ID) | 如果存在與指定對(duì)象相關(guān)聯(lián)的文檔,則返回true |
List |
返回指定Repository類型的所有文檔 |
List |
返回指定文檔ID對(duì)應(yīng)的所有文檔 |
List |
為指定Repository類型,返回分頁(yè)且排序的文檔列表 |
List |
為指定Repository類型,返回排序后的所有文檔列表 |
T findOne(ID) | 為指定的ID返回單個(gè)文檔 |
Save(terable |
保存指定Iterable中的所有文檔 |
save( |
為給定的對(duì)象保存一條文檔 |
上面的我們定義的四個(gè)方法都是我們自定義的方法,其方法名存在很多意義,不能隨便定義
ListfindByCustomer(String c);
find為查詢動(dòng)詞,還可以是read、get、count等
Customer為斷言,判斷其行為
在斷言中,會(huì)有一個(gè)或多個(gè)限制結(jié)果的條件。每個(gè)條件必須引用一個(gè)屬性,并且還可以指定一種比較操作。如果省略比較操作符的話,那么這暗指是一種相等比較操作。不過(guò),我們也可以選擇其他的比較操作
類型 |
---|
IsAfter、After、IsGreaterThan、GreaterThan |
IsGreaterThanEqual、GreaterThanEqual |
IsBefore、Before、IsLessThan、LessThan |
IsLessThanEqual、LessThanEqual |
IsBetween、Between |
IsNull、Null |
IsNotNull、NotNull |
IsIn、In |
IsNotIn、NotIn |
IsStartingWith、StartingWith、StartsWith |
IsEndingWith、EndingWith、EndsWith |
IsContaining、Containing、Contains |
IsLike、Like |
IsNotLike、NotLike |
IsTure、True |
IsFalse、False |
Is、Equals |
IsNot、Not |
other
類型 |
---|
IgnoringCase、IgnoresCase、OrderBy、And、Or |
@Query("{"customer":"Chuck Wagon","type":?0}") ListfindChucksOrders(String t);
混合自定義的功能@Query中給定的JSON將會(huì)與所有的Order文檔進(jìn)行匹配,并返回匹配的文檔,這里的type屬性映射成“?0”,這表明type屬性應(yīng)該與查詢方法的第0個(gè)參數(shù)相等,如果有多個(gè)參數(shù),則"?1".....
package springmvc.orders.db; import java.util.List; import springmvc.bean.Order; public interface OrderOperations { ListfindOrdersByType(String t); }
package springmvc.orders.db; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import springmvc.bean.Order; public class OrderRepositoryImpl implements OrderOperations { @Autowired private MongoOperations mongo; //將混合實(shí)現(xiàn)注入MongoOperations @Override public ListfindOrdersByType(String t) { String type =t.equals("Net")?"2":t; Criteria where=Criteria.where("type").is(type); Query query=Query.query(where); return mongo.find(query, Order.class); } }
package springmvc.orders.db; import java.util.List; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import springmvc.bean.Order; //繼承OrderOperations接口 public interface OrderRepository extends MongoRepository,OrderOperations { List findByCustomer(String c); List findByCustomerLike(String c); List findByCustomerAndType(String c, String t); List findByCustomerLikeAndType(String c, String t); @Query("{"customer":"Chuck Wagon","type":?0}") List findChucksOrders(String t); }
package springmvc.web; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import springmvc.bean.Order; import springmvc.orders.db.OrderRepository; @Controller public class HomeController { @Autowired MongoOperations mongo; @Autowired OrderRepository orderRepository; @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET) public String index() { Listlist=orderRepository.findOrdersByType("2"); System.out.println(list.size()); return "index"; } }
以上這些關(guān)聯(lián)起來(lái)的關(guān)鍵點(diǎn)是OrderRepositoryImpl,這個(gè)名字前半部分與OrderRepository相同,只是添加了一個(gè)“Impl”后綴。如果想更改該后綴,可以在MongoConfig類中更改為自己理想的后綴
@EnableMongoRepositories(basePackages = "springmvc.orders.db",repositoryImplementationPostfix="Stuff")
更多內(nèi)容可以關(guān)注微信公眾號(hào),或者訪問(wèn)AppZone網(wǎng)站
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/18871.html
摘要:每個(gè)條件必須引用一個(gè)屬性,并且還可以指定一種比較操作。如果省略比較操作符的話,那么這暗指是一種相等比較操作。 Spring-data對(duì)MongoDB進(jìn)行了很好的支持,接下來(lái)就講解一下關(guān)于Spring對(duì)MongoDB的配置和一些正常的使用 我下面的工程使用的是Spring的Java配置的方式和Maven構(gòu)建 具體的工程代碼大家可以訪問(wèn)我的Github地址:https://github.c...
摘要:安裝基本是一路下一步,需要注意的地方小胖網(wǎng)上找了幾張圖來(lái)說(shuō)明。這里可以自定選擇需要安裝的東西小胖選擇完全安裝,隨便你們選擇安裝路徑但是需要注意不要選擇一個(gè)叫的東西,否則可能要很長(zhǎng)時(shí)間都一直在執(zhí)行安裝,是一個(gè)圖形界面管理工具。 Overview: 環(huán)境 前言 效果圖 mongdb安裝 代碼涉及知識(shí)點(diǎn) 關(guān)于windows的cmd下執(zhí)行python文件顯示中文亂碼的問(wèn)題 總結(jié) 0.環(huán)境 ...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個(gè)月又過(guò)去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還專門做了一個(gè)小項(xiàng)目,這里就把讀書與小項(xiàng)目過(guò)程中的一些心得體會(huì)記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個(gè)月又過(guò)去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個(gè)月又過(guò)去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還專門做了一個(gè)小項(xiàng)目,這里就把讀書與小項(xiàng)目過(guò)程中的一些心得體會(huì)記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個(gè)月又過(guò)去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還...
閱讀 3027·2021-11-02 14:40
閱讀 844·2019-08-30 15:53
閱讀 1265·2019-08-30 15:53
閱讀 3259·2019-08-30 13:53
閱讀 3305·2019-08-29 12:50
閱讀 1132·2019-08-26 13:49
閱讀 1863·2019-08-26 12:20
閱讀 3660·2019-08-26 11:33