之前我們介紹了MongoDB以及如何在Robo 3T中通過圖形化界面或是在Shell中通過nosql語句進行增刪改查,但是在實際應用中,我們不太會通過這兩種方式來對MongoDB進行操作缸托,接下來我們將介紹更為實用的方式,即在SpringMVC中實現(xiàn)對MongoDB的增刪改查廊勃。
一溉卓、搭建SpringMVC工程
這里我們使用的IDE是IntelliJ IDEA皮迟,通過創(chuàng)建maven工程來搭建SpringMVC。
如何搭建SpringMVC不是我們的重點桑寨,并且已有許多相關資料伏尼,因此這里不再介紹。下面的工作基于已經(jīng)成功在maven工程中搭建好了SpringMVC尉尾。
二爆阶、添加maven依賴
我們使用Spring Data MongoDB來操作MongoDB,因此需要先在maven的pom.xml中添加相關依賴代赁,并同步扰她。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.10.1</version>
</dependency>
三、MongoDB配置類
@Configuration
public class MongoConfig {
//MongoClient bean
@Bean
public MongoFactoryBean mongo(){
MongoFactoryBean mongo = new MongoFactoryBean();
mongo.setHost("localhost");
return mongo;
}
//MongoTemplate bean
@Bean
public MongoOperations mongoTemplate(Mongo mongo){
return new MongoTemplate(mongo,"test1");//指定數(shù)據(jù)庫名稱
}
}
四芭碍、創(chuàng)建實體類(對應Document)
@Document
public class Order {
@Id
private String id;
private String customer;
private Collection<Item> items = new LinkedHashSet<Item>();
public void setCustomer(String customer){
this.customer = customer;
}
public String getCustomer() {return customer;}
public String getId(){
return id;
}
public void setItem(Collection<Item> items){
this.items = items;
}
public Collection<Item> getItems(){
return items;
}
}
五徒役、創(chuàng)建子實體類(對應一個Document下的子Document)
public class Item {
private Long itemID;
private Order order;
private String product;
private double price;
private int quantity;
public Long getItemID(){
return itemID;
}
public Order getOrder(){
return order;
}
public String getProduct(){
return product;
}
public double getPrice(){
return price;
}
public int getQuantity(){
return quantity;
}
public void setItemID(Long itemID){
this.itemID = itemID;
}
public void setProduct(String product){
this.product = product;
}
public void setPrice(double price){
this.price = price;
}
public void setQuantity(int quantity){
this.quantity = quantity;
}
}
六、插入
@Test
public void insertTest() throws Exception{
Order order = new Order();
Item item1 = new Item();
item1.setItemID((long) 1);
item1.setPrice(100);
item1.setQuantity(10);
item1.setProduct("Cup");
Item item2 = new Item();
item2.setItemID((long) 2);
item2.setPrice(50);
item2.setQuantity(5);
item2.setProduct("Desk");
order.setCustomer("Tom");
Collection<Item> ItemCollection = new LinkedHashSet<Item>();
ItemCollection.add(item1);
ItemCollection.add(item2);
order.setItem(ItemCollection);
mongo.save(order,"order");//在名為order的collection下增加一個Document窖壕,若沒有名為order的collection忧勿,則自動創(chuàng)建
}
運行測試。
七瞻讽、查詢
統(tǒng)計一個collection下的Document數(shù)鸳吸。
long orderCount = mongo.getCollection("order").count();//統(tǒng)計一個collection下的文檔數(shù)
根據(jù)Id查找。(最后一個參數(shù)"order"是collection名速勇,可省略晌砾,下同)
String orderID = "5a747fa9a80e7722bfcbb372";
Order order1 = mongo.findById(orderID,Order.class,"order");//根據(jù)ID查找
查詢。
List<Order> OrderList = mongo.find(Query.query(Criteria.where("customer").is("Tom")),Order.class,"order");//通過構(gòu)造Query對象進行查詢
多條件查詢烦磁。
List<Order> OrderList1 = mongo.find(Query.query(Criteria.where("customer").is("Tom").and("sex").is("man")),Order.class,"order");//多條件查詢
八养匈、刪除
刪除order1對象在數(shù)據(jù)庫中對應的Document。
mongo.remove(order1,"order");//刪除對象(先要進行查找)
九都伪、修改
將含有"customer":"Tom"的Document中的"customer":"Tom"改為"customer":"Mike"呕乎。
mongo.updateMulti(Query.query(Criteria.where("customer").is("Tom")), Update.update("customer","Tom").set("customer","Mike"),Order.class,"order");//改
如果只修改一個Document,可將updateMulti()方法改成updateFirst()方法陨晶。