MongoDB
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比興平網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式興平網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋興平地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
MongoDB作為一種NoSql數(shù)據(jù)庫產(chǎn)品,其實已經(jīng)非常著名了。去年,由于MongoDB安全認證的薄弱,上萬家公司中招。雖然是一則負面新聞,但是也從側(cè)面說明了MongoDB的流行程度。
下圖是DB-Engines統(tǒng)計的2017年5月全球數(shù)據(jù)庫引擎使用排名。從圖中可以看出,mongoDB位列總榜第五,非關(guān)系數(shù)據(jù)庫第一,非??壳暗呐琶?。
我個人對mongoDB并不是非常熟悉,但是經(jīng)過一段時間的了解,對mongoDB的特性還是有了一些簡單的理解,這里記錄一二。
話說了這么多,還是要回到實際使用上。這里我將使用Spring Boot來操作mongoDB,Spring Boot由于有Spring Data的支持,使用mongoDB還是比較輕松方便的。
方法如下:
首先是添加Spring Data mongo的配置依賴,如下所示:
compile("org.springframework.boot:spring-boot-starter-data-mongodb")
其次是在application.properties中配置mongoDB的連接參數(shù),如下所示:
spring.data.mongodb.uri=mongodb://localhost:27017/dbname
Spring Boot配置就是這樣簡單,然后就是具體的代碼編寫了。首先,需要定義一個實體類,這里用一個User的簡單實體類來說明:
@Document(collection = "users") public class User { @Id private String id; private String username; private Integer age; }
這段代碼里面省略了getter和setter,所以看起來非常簡單。值得注意的一點是@Document注解,它是mongoDB專用的。了解mongoDB的話,都知道collection之于mongoDB,就像關(guān)系數(shù)據(jù)庫的table一樣。通過指定collection,可以實現(xiàn)實體類到mongoDB集合的映射關(guān)系。如果不顯式指定collection,Spring會根據(jù)實體類的名字去推測集合的名字。
配置完畢,實體類也實現(xiàn)完畢,我們需要的就是實現(xiàn)mongoDB的各種操作,從而把數(shù)據(jù)庫和應用程序連接起來。按照Spring data的現(xiàn)狀,實現(xiàn)數(shù)據(jù)庫操作大概有兩種方式——MongoRepository、mongoTemplate。MongoRepository是一種相對簡單的方式,它可以幫我們輕松的實現(xiàn)簡答的CRUD操作。
下面就是它的使用方式:
public interface UserRepository extends MongoRepository<User, Long>{ User findByUsername(String username); }
然后在使用數(shù)據(jù)庫的地方直接依賴注入UserRepository即可。的確非常簡單,這是因為Spring幫我們做了兩件事,首先Spring會為Repository生成bean,一般來說Spring內(nèi)置的Repository及其子類都使用了@NoRepositoryBean注解,所以只有用戶定義的沒有該注解的interface才會被實例化一個bean。其次Spring會根據(jù)interface中的方法名,去自動生成CRUD操作的函數(shù),因此我們連實現(xiàn)代碼都不用寫了。
使用MongoTemplate會稍微麻煩一點,但同時它能夠完成的工作也更多一些。下面是使用mongoTemplate的方式,為了展示其強大的能力,我們使用一個稍微復雜點例子。
代碼如下:
@Component public class ArticleRepositoryImpl { MongoTemplate mongoTemplate; @Autowired public ArticleRepositoryImpl(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } public List<Article> find(Query query) { return mongoTemplate.find(query, Article.class); } public Article findOne(Query query) { return mongoTemplate.findOne(query, Article.class); } public void update(Query query, Update update) { mongoTemplate.findAndModify(query, update, Article.class); } public Article save(Article article) { mongoTemplate.insert(article); return article; } public Article findById(String id) { return mongoTemplate.findById(id, Article.class); } public Page<Article> findPage(Page<Article> page, Query query) { long count = count(query); int pageNumber = page.getPageNumber(); int pageSize = page.getPageSize(); query.skip((pageNumber - 1) * pageSize).limit(pageSize); List<Article> rows = find(query); page.setContent(rows); return page; } public long count(Query query) { return mongoTemplate.count(query, Article.class); } }
對于Article這個實體類,我們其實不需要太關(guān)心它的細節(jié)。為了實現(xiàn)分頁查詢的功能(主要在findPage中實現(xiàn)),代碼使用了略微復雜的查詢操作,這里就體現(xiàn)到了mongoTemplate的更為強大的定制化操作能力。而這里的component注解也只是一種聲明bean的方式。除了它之外,還有很多配置的方式,但功能都是一樣的,這里也就不深究了。
把數(shù)據(jù)庫的結(jié)果通過一個RESTful的接口返回去,就可以看到數(shù)據(jù)庫的查詢結(jié)果,代碼如下所示:
@RestController public class SimpleRestController { private UserRepository userRepository; @Autowired public SimpleRestController(UserRepository userRepository) { this.userRepository = userRepository; } @RequestMapping(value="/users", method = RequestMethod.GET) public List<User> greeting(@RequestParam(value = "name", defaultValue = "World") String name) { return userRepository.findAll(); } }
通過瀏覽器的訪問結(jié)果如下所示:
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。
分享名稱:利用SpringBoot操作MongoDB的方法教程
標題URL:http://aaarwkj.com/article6/gjipig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、小程序開發(fā)、定制網(wǎng)站、網(wǎng)站設(shè)計公司、Google、自適應網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)