亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Spring Boot操作MongoDB的方法教程

 更新時(shí)間:2017年05月26日 09:30:48   投稿:daisy  
mongodb是最早熱門(mén)非關(guān)系數(shù)據(jù)庫(kù)的之一,使用也比較普遍,一般會(huì)用做離線數(shù)據(jù)分析來(lái)使用,放到內(nèi)網(wǎng)的居多,下面這篇文章主要給大家介紹了利用Spring Boot操作MongoDB的方法教程,需要的朋友可以參考下

MongoDB

MongoDB作為一種NoSQL數(shù)據(jù)庫(kù)產(chǎn)品,其實(shí)已經(jīng)非常著名了。去年,由于MongoDB安全認(rèn)證的薄弱,上萬(wàn)家公司中招。雖然是一則負(fù)面新聞,但是也從側(cè)面說(shuō)明了MongoDB的流行程度。

下圖是DB-Engines統(tǒng)計(jì)的2017年5月全球數(shù)據(jù)庫(kù)引擎使用排名。從圖中可以看出,mongoDB位列總榜第五,非關(guān)系數(shù)據(jù)庫(kù)第一,非常靠前的排名。

我個(gè)人對(duì)mongoDB并不是非常熟悉,但是經(jīng)過(guò)一段時(shí)間的了解,對(duì)mongoDB的特性還是有了一些簡(jiǎn)單的理解,這里記錄一二。

  • 首先,mongoDB作為一種非關(guān)系型數(shù)據(jù)庫(kù),它最大的特點(diǎn)就是Schema非常的弱。換而言之,mongoDB的升級(jí)以及應(yīng)用的重構(gòu)會(huì)變得比較簡(jiǎn)單。
  • 其次,mongoDB使用了文檔型的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)接口則非常接近于JSON。JSON這種數(shù)據(jù)結(jié)構(gòu)不僅簡(jiǎn)單而且也是非常流行的網(wǎng)絡(luò)傳輸格式。
  • 此外,mongoDB充分考慮了數(shù)據(jù)庫(kù)規(guī)模擴(kuò)展的需要,所以能夠很好的適應(yīng)業(yè)務(wù)發(fā)展。

話(huà)說(shuō)了這么多,還是要回到實(shí)際使用上。這里我將使用Spring Boot來(lái)操作mongoDB,Spring Boot由于有Spring Data的支持,使用mongoDB還是比較輕松方便的。

方法如下:

首先是添加Spring Data mongo的配置依賴(lài),如下所示:

 compile("org.springframework.boot:spring-boot-starter-data-mongodb")

其次是在application.properties中配置mongoDB的連接參數(shù),如下所示:

spring.data.mongodb.uri=mongodb://localhost:27017/dbname

Spring Boot配置就是這樣簡(jiǎn)單,然后就是具體的代碼編寫(xiě)了。首先,需要定義一個(gè)實(shí)體類(lèi),這里用一個(gè)User的簡(jiǎn)單實(shí)體類(lèi)來(lái)說(shuō)明:

@Document(collection = "users")
public class User {
 @Id
 private String id;

 private String username;
 private Integer age;
}

這段代碼里面省略了getter和setter,所以看起來(lái)非常簡(jiǎn)單。值得注意的一點(diǎn)是@Document注解,它是mongoDB專(zhuān)用的。了解mongoDB的話(huà),都知道collection之于mongoDB,就像關(guān)系數(shù)據(jù)庫(kù)的table一樣。通過(guò)指定collection,可以實(shí)現(xiàn)實(shí)體類(lèi)到mongoDB集合的映射關(guān)系。如果不顯式指定collection,Spring會(huì)根據(jù)實(shí)體類(lèi)的名字去推測(cè)集合的名字。

配置完畢,實(shí)體類(lèi)也實(shí)現(xiàn)完畢,我們需要的就是實(shí)現(xiàn)mongoDB的各種操作,從而把數(shù)據(jù)庫(kù)和應(yīng)用程序連接起來(lái)。按照Spring data的現(xiàn)狀,實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作大概有兩種方式——MongoRepository、mongoTemplate。MongoRepository是一種相對(duì)簡(jiǎn)單的方式,它可以幫我們輕松的實(shí)現(xiàn)簡(jiǎn)答的CRUD操作。

下面就是它的使用方式:

public interface UserRepository extends MongoRepository<User, Long>{
 User findByUsername(String username);
}

然后在使用數(shù)據(jù)庫(kù)的地方直接依賴(lài)注入U(xiǎn)serRepository即可。的確非常簡(jiǎn)單,這是因?yàn)镾pring幫我們做了兩件事,首先Spring會(huì)為Repository生成bean,一般來(lái)說(shuō)Spring內(nèi)置的Repository及其子類(lèi)都使用了@NoRepositoryBean注解,所以只有用戶(hù)定義的沒(méi)有該注解的interface才會(huì)被實(shí)例化一個(gè)bean。其次Spring會(huì)根據(jù)interface中的方法名,去自動(dòng)生成CRUD操作的函數(shù),因此我們連實(shí)現(xiàn)代碼都不用寫(xiě)了。

使用MongoTemplate會(huì)稍微麻煩一點(diǎn),但同時(shí)它能夠完成的工作也更多一些。下面是使用mongoTemplate的方式,為了展示其強(qiáng)大的能力,我們使用一個(gè)稍微復(fù)雜點(diǎn)例子。

代碼如下:

@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);
 }
}

對(duì)于Article這個(gè)實(shí)體類(lèi),我們其實(shí)不需要太關(guān)心它的細(xì)節(jié)。為了實(shí)現(xiàn)分頁(yè)查詢(xún)的功能(主要在findPage中實(shí)現(xiàn)),代碼使用了略微復(fù)雜的查詢(xún)操作,這里就體現(xiàn)到了mongoTemplate的更為強(qiáng)大的定制化操作能力。而這里的component注解也只是一種聲明bean的方式。除了它之外,還有很多配置的方式,但功能都是一樣的,這里也就不深究了。

把數(shù)據(jù)庫(kù)的結(jié)果通過(guò)一個(gè)RESTful的接口返回去,就可以看到數(shù)據(jù)庫(kù)的查詢(xún)結(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();
 }

}

通過(guò)瀏覽器的訪問(wèn)結(jié)果如下所示:

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • java對(duì)double數(shù)組排序示例分享

    java對(duì)double數(shù)組排序示例分享

    這篇文章主要介紹了java對(duì)double數(shù)組排序示例,代碼簡(jiǎn)單,下面我們直接上代碼,需要的朋友可以參考下
    2014-03-03
  • Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例

    Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例

    下面小編就為大家?guī)?lái)一篇Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • SpringMVC日期類(lèi)型接收空值異常問(wèn)題解決方法

    SpringMVC日期類(lèi)型接收空值異常問(wèn)題解決方法

    這篇文章主要介紹了SpringMVC日期類(lèi)型接收空值異常問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java 二叉樹(shù)遍歷的常用方法

    Java 二叉樹(shù)遍歷的常用方法

    二叉樹(shù)的遍歷可以說(shuō)是解決二叉樹(shù)問(wèn)題的基礎(chǔ)。我們常用的遍歷方式無(wú)外乎就四種 前序遍歷、中序遍歷、后續(xù)遍歷、層次遍歷 這四種。
    2021-05-05
  • 如何把idea中的項(xiàng)目導(dǎo)入github倉(cāng)庫(kù)中(圖文詳解)

    如何把idea中的項(xiàng)目導(dǎo)入github倉(cāng)庫(kù)中(圖文詳解)

    這篇文章主要介紹了如何把idea中的項(xiàng)目導(dǎo)入github倉(cāng)庫(kù)中,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Intellij IDEA 熱部署處理方法(圖解)

    Intellij IDEA 熱部署處理方法(圖解)

    本文通過(guò)圖文并茂的形式給大家介紹了Intellij IDEA 熱部署處理方法,需要的朋友可以參考下
    2018-02-02
  • java用list集合存儲(chǔ)學(xué)生信息并算出成績(jī)平均值操作

    java用list集合存儲(chǔ)學(xué)生信息并算出成績(jī)平均值操作

    這篇文章主要介紹了java用list集合存儲(chǔ)學(xué)生信息并算出成績(jī)平均值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java并發(fā)編程之cas詳解

    java并發(fā)編程之cas詳解

    這篇文章主要介紹了java并發(fā)編程之cas詳解,涉及cas使用場(chǎng)景和cas用作原子操作等內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏

    Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏

    本文主要介紹了Springboot之配置文件數(shù)據(jù)脫敏、接口返回?cái)?shù)據(jù)脫敏、日志文件數(shù)據(jù)脫敏三個(gè)方面,需要了解學(xué)習(xí)的小伙伴快跟隨小編的腳步一起去看看吧
    2021-09-09
  • Java基礎(chǔ)題新手練習(xí)(二)

    Java基礎(chǔ)題新手練習(xí)(二)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07

最新評(píng)論