使用SpringMVC实现对MongoDB简单的增删改查

之前我们介绍了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()方法。

到这里,使用SpringMVC实现对MongoDB简单的增删改查就讲完啦。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容