Spring Data 与MongoDB 集成二:操作篇(添加和删除)解析

不点 阅读:236 2021-03-31 21:41:59 评论:0

一、简介

spring-data-mongodb项目提供与mongdb文档数据库的集成,spring-data-mongodb提供了org.springframework.data.mongodb.core.MongoTemplate对mongdb的CRUD操作,包括对集成的对象映射文件和POJO之间的CRUD的操作。


二、MongDB文档数据库:添加

spring-data-mongodb的MongoTemplate提供两种文档存储方式:分别是save()和insert(),这两种的区别:
(1)、save:我们在新增文档时,如果有一个相同_ID文档时,会覆盖原来的。
(2)、insert:我们在新增文档时,如果有一个相同_ID文档时,就会新增失败。

1、save 和insert 具体语法介绍
save 方式:

1)void save (Object objectToSave) 保存文档到默认的集合。

        2)void save(Object objectToSave, String collectionName) 对指定的集合进行保存。

insert方式:

1)void insert(Object objectToSave) 保存文档到默认的集合。

      2)void insertAll(Object objectsToSave) 批量添加到默认的集合。

      3)void insert(Object objectToSave, String collectionName) 对指定的集合进行保存。



2、spring-data-mongodb 实现对mongodb添加操作。

1)、实现一个基础通用接口,MongoBase<T>类文件

      public interface MongoBase<T> { 
	// insert添加 
	public void insert(T object,String collectionName);  
	// save添加 
	public void save(T object,String collectionName);  
	//批量添加 
	public void insertAll(List<T> object);  
      }

2)、实现文档数据库结构体,(java实体对象)

/** 
 * 订单 
 * @author zhengcy 
 * 
 */ 
public class Orders implements Serializable { 
	/** 
	 *  
	 */ 
	private static final long serialVersionUID = 1L; 
	//ID 
	private String id; 
	//订单号 
	private String onumber; 
	//日期 
	private Date date; 
	//客户名称 
	private String cname; 
	//订单 
    private List<Item> items; 
	 
	public String getId() { 
		return id; 
	} 
	public void setId(String id) { 
		this.id = id; 
	} 
	public Date getDate() { 
		return date; 
	} 
	public void setDate(Date date) { 
		this.date = date; 
	} 
	public String getCname() { 
		return cname; 
	} 
	public void setCname(String cname) { 
		this.cname = cname; 
	} 
	public String getOnumber() { 
		return onumber; 
	} 
	public void setOnumber(String onumber) { 
		this.onumber = onumber; 
	} 
	public List<Item> getItems() { 
		return items; 
	} 
	public void setItems(List<Item> items) { 
		this.items = items; 
	} 
 
}

/** 
 * 产品订购表 
 * @author zhengcy 
 * 
 */ 
public class Item { 
	 
	//数量 
	private Integer quantity; 
	//单价 
	private Double price; 
	//产品编码 
	private String pnumber; 
	public Integer getQuantity() { 
		return quantity; 
	} 
	public void setQuantity(Integer quantity) { 
		this.quantity = quantity; 
	} 
	public Double getPrice() { 
		return price; 
	} 
	public void setPrice(Double price) { 
		this.price = price; 
	} 
	public String getPnumber() { 
		return pnumber; 
	} 
	public void setPnumber(String pnumber) { 
		this.pnumber = pnumber; 
	} 
} 
 


3)、 实现OrdersDao类,就是实现Orders自己操作文档数据库(mongodb) 的接口,这个OrdersDao继承MongoBase接口.

/** 
 * 订单Dao 
 * @author zhengcy 
 * 
 */ 
public interface OrdersDao extends MongoBase<Orders> { 
 
 
}

4)、 实现OrdersDaoImpl具体类。

 /** 
 * 订单实现 
 * @author zhengcy 
 * 
 */ 
@Repository("ordersDao") 
public class OrdersDaoImpl implements OrdersDao { 
	@Resource 
	private MongoTemplate mongoTemplate; 
 
	@Override 
	public void insert(Orders object, String collectionName) { 
		mongoTemplate.insert(object, collectionName); 
		 
	} 
	 
	 
	@Override 
	public void save(Orders object, String collectionName) { 
		mongoTemplate.save(object, collectionName); 
		 
	} 
	 
	@Override 
	public void insertAll(List<Orders> objects) { 
		mongoTemplate.insertAll(objects); 
		 
	} 
} 
 

5)、测试代码就不粘贴出来了,大家可以通过junit4,进行相关的功能测试。


三、MongDB文档数据库:删除

spring-data-mongodb的MongoTemplate提供文档删除方法,如下截图:
1)、指定特定条件的文档删除。
 第一步:我们在基础接口MongoBase.java类新增一个根据条件删除文档的接口  。
 /**  
     * 根据条件 删除  
     *   
     * @param query  
     */   
    public void remove(Query query);  

第二步: 我们在OrdersDaoImpl类添加一个具体根据条件删除文档的实现方法。
 public void remove(Query query) {   
        mongoTemplate.remove(query, this.getEntityClass());   
    } 


第三步:测试代码就不粘贴出来了,有兴趣可以通过junit4进行相关测试。

2)、集合删除
第一步:我们在基础接口MongoBase.java类新增一个根据条件删除集合的接口。       
         //删除集合 
            public void dropCollection(String collectionName);

第二步:我们在OrdersDaoImpl类添加一个具体根据条件删除集合的实现方法。
         @Override 
	public void dropCollection(String collectionName) { 
		mongoTemplate.dropCollection(collectionName); 
	}

第三步:测试代码就不粘贴出来了,有兴趣可以通过junit4进行相关测试。









声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们