之前我们介绍了MongoDB以及如何在Robo 3T中通过图形化界面或是在Shell中通过nosql语句进行增删改查,但是在实际应用中,我们不太会通过这两种方式来对MongoDB进行操作,接下来我们将介绍更为实用的方式,即在SpringMVC中实现对MongoDB的增删改查。
一、搭建SpringMVC工程
这里我们使用的IDE是IntelliJ IDEA,通过创建maven工程来搭建SpringMVC。
如何搭建SpringMVC不是我们的重点,并且已有许多相关资料,因此这里不再介绍。下面的工作基于已经成功在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");//指定数据库名称
}
}
四、创建实体类(对应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;
}
}
五、创建子实体类(对应一个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,则自动创建
}
运行测试。
插入
七、查询
统计一个collection下的Document数。
long orderCount = mongo.getCollection("order").count();//统计一个collection下的文档数
根据Id查找。(最后一个参数"order"是collection名,可省略,下同)
String orderID = "5a747fa9a80e7722bfcbb372";
Order order1 = mongo.findById(orderID,Order.class,"order");//根据ID查找
查询。
List<Order> OrderList = mongo.find(Query.query(Criteria.where("customer").is("Tom")),Order.class,"order");//通过构造Query对象进行查询
多条件查询。
List<Order> OrderList1 = mongo.find(Query.query(Criteria.where("customer").is("Tom").and("sex").is("man")),Order.class,"order");//多条件查询
八、删除
删除order1对象在数据库中对应的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()方法。
网友评论