javascript
Spring boot整合Mongodb
最近的項目用了Mongodb,網(wǎng)上的用法大多都是七零八落的沒有一個統(tǒng)一性,自己大概整理了下,項目中的相關(guān)配置就不敘述了,由于spring boot的快捷開發(fā)方式,所以spring boot項目中要使用Mongodb,只需要添加依賴和配置application.properties文件即可。整和方式一共有兩種,一種是JPA的快捷方式,還有一種是實現(xiàn)MongoTemplate中的方法。
一、spring boot Mongodb JPA
這種是mongodb的快捷開發(fā)方式,類似于spring data jpa的操作,通過使用spring boot約定的規(guī)范來定義名字,與HibernateRepository類似,通過繼承MongoRepository接口,我們可以非常方便地實現(xiàn)對一個對象的增刪改查,要使用Repository的功能,先繼承MongoRepository<T, TD>接口,其中T為倉庫保存的bean類,TD為該bean的唯一標(biāo)識的類型,一般為ObjectId。之后在service中注入該接口就可以使用,無需實現(xiàn)里面的方法,spring會根據(jù)定義的規(guī)則自動生成。
創(chuàng)建一個bean,其中@id是這種表的主鍵,user就是表的名字
import org.springframework.data.annotation.Id;public class User {@Idprivate Long id;private String name;private Integer userage;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getUserage() {return userage;}public void setUserage(Integer userage) {this.userage = userage;}public User(Long id, String name, Integer userage) {super();this.id = id;this.name = name;this.userage = userage;}} View Code通過jpa的方式實現(xiàn)查找,下面介紹最簡單的兩張和定義規(guī)則:
import org.springframework.data.mongodb.repository.MongoRepository;public interface UserMongodbJPA extends MongoRepository<User, Long>{ /*** * 單個條件查詢,通過名字到數(shù)據(jù)* 方法名字定義規(guī)則:* find +By+條件字段(必須是User中的屬性)*/List<User> findByName(String name);/** * 多個條件查詢,通過年齡和名字找到數(shù)據(jù)* 方法名字定義規(guī)則:* * ind +By+條件字段(必須是User中的屬性)+AND+條件字段(必須是User中的屬性)*/List<User> findByUserageAndName(Integer userage,String name ); } View Code具體的其他命名規(guī)則,可通過下面的圖進(jìn)行查閱:
二、Spring boot? Mongodb原生實現(xiàn)方式
? JAP的方式雖然簡單快捷,但是這種方式只能進(jìn)行簡單的查詢操作,但是業(yè)務(wù)中往往需要復(fù)雜的邏輯操作,這時就不滿足我們的需求,所以使用原生的方式,就能解決復(fù)制的邏輯業(yè)務(wù)。這種方式通過繼承MongoRepository接口,只需要調(diào)用MongoTemplate中的方法即可。
插入數(shù)據(jù)
MongoTemplate為我們提供了兩種方法插入數(shù)據(jù):insert和save,兩者的區(qū)別就是insert方法如果插入的數(shù)據(jù)的主鍵已經(jīng)存在,則會拋出異常;save方法插入的數(shù)據(jù)的主鍵已經(jīng)存在,則會對當(dāng)前已經(jīng)存在的數(shù)據(jù)進(jìn)行修改操作。? ??
private MongoTemplate mongoTemplate;/*** insert方法,會新增一條數(shù)據(jù)*/public void insert(){User u = new User("1","zhangsan",18);mongoTemplate.insert(u);}/*** save方法,如果主鍵重復(fù),則修改原來的數(shù)據(jù)*/public void save() {User u = new User("1","小明",19);mongoTemplate.save(u);} View Code?
? ? ?更新數(shù)據(jù)
? ? ?更新一條數(shù)據(jù),在關(guān)系型數(shù)據(jù)庫中,我們需要where條件篩選出需要更新的數(shù)據(jù),并且要給定更新的字段及值,在mongodb中也是一樣,如果要使用篩選條件,就必須實例化Query對象。
/*** 要使用原生的mongodb方式,就要創(chuàng)建MongoTemplate ,*他的方法來實現(xiàn)SQL*/ private MongoTemplate mongoTemplate;/*** 更新對象*/public void updateTest() {//用來封裝所有條件的對像Query query = new Query();//用來構(gòu)建條件Criteria criteria = new Criteria();//criteria.and("你MongoDB中的key").is("你的條件") criteria.and("name").is("小明");//把條件封裝起來 query.addCriteria(criteria) ;// Update 中構(gòu)建更新的內(nèi)容Update update= new Update().set("userage", "15").set("name", "小紅");//更新查詢返回結(jié)果集的第一條mongoTemplate.updateFirst(query,update,MongoTest.class);//更新查詢返回結(jié)果集的所有mongoTemplate.updateMulti(query,update,User.class); } View Code? ? ?刪除數(shù)據(jù)
? ? ?刪除數(shù)據(jù)和更新數(shù)據(jù)類似,只需要使用MongoTemplate中的remove方法就能實現(xiàn)。
*** 刪除對象*、*/public void deleteTestById() {Query query=new Query(Criteria.where("name").is("小紅"));mongoTemplate.remove(query,User.class);}、 View Code?
三、聚合操作
? 在mysql數(shù)據(jù)庫中,我們更多情況我們會使用聚合操作來簡便我們的代碼,列如SUM、count;在mongodb的數(shù)據(jù)庫中,也是有這樣的聚合函數(shù),但是這時不在使用Query對象來封裝條件,而是使用Aggregation對象來實現(xiàn)聚合操作,需要注意的是:mongoTemplate.aggregate實現(xiàn)的方法返回的是AggregationResults對象。
public AggregationResults<T> aggregation(int pageNum, int pageSize, Criteria criteria,String name, String sortName, Sort sort,String tableName)throws BbsException {Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),//用于過濾數(shù)據(jù),只輸出符合條件的文檔Aggregation.group(name);//將集合中的文檔根據(jù)fileID分組,可用于統(tǒng)計結(jié)果。Aggregation.sort(sort), //將輸入文檔根據(jù)sort排序后輸出。Aggregation.skip(pageNum - 1) * pageSize),//在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文檔。Aggregation.limit(pageSize),//用來限制MongoDB聚合管道返回的文檔數(shù)。Aggregation.sum(userage)//用來求和,求出userage字段值的和 );return mongoTemplate.aggregate(aggregation, tableName, user.class);//tableName表示表的名字 View Code?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/daijiting/p/10083842.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Spring boot整合Mongodb的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【2019年中总结】五种途径对接天猫精灵
- 下一篇: python数据分析与基础实战_《pyt