Browse Source

spring-boot-demo-mongodb 完成

pull/1/head
Yangkai.Shen 5 years ago
parent
commit
b7c981911d
6 changed files with 301 additions and 0 deletions
  1. +21
    -0
      spring-boot-demo-mongodb/pom.xml
  2. +21
    -0
      spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/SpringBootDemoMongodbApplication.java
  3. +65
    -0
      spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/model/Article.java
  4. +29
    -0
      spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/repository/ArticleRepository.java
  5. +9
    -0
      spring-boot-demo-mongodb/src/main/resources/application.yml
  6. +156
    -0
      spring-boot-demo-mongodb/src/test/java/com/xkcoding/mongodb/repository/ArticleRepositoryTest.java

+ 21
- 0
spring-boot-demo-mongodb/pom.xml View File

@@ -28,11 +28,32 @@
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

<build>


+ 21
- 0
spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/SpringBootDemoMongodbApplication.java View File

@@ -1,8 +1,24 @@
package com.xkcoding.mongodb;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
* <p>
* 启动器
* </p>
*
* @package: com.xkcoding.mongodb
* @description: 启动器
* @author: yangkai.shen
* @date: Created in 2018-12-28 16:14
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@SpringBootApplication
public class SpringBootDemoMongodbApplication {

@@ -10,5 +26,10 @@ public class SpringBootDemoMongodbApplication {
SpringApplication.run(SpringBootDemoMongodbApplication.class, args);
}

@Bean
public Snowflake snowflake() {
return IdUtil.createSnowflake(1, 1);
}

}


+ 65
- 0
spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/model/Article.java View File

@@ -0,0 +1,65 @@
package com.xkcoding.mongodb.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

import java.util.Date;

/**
* <p>
* 文章实体类
* </p>
*
* @package: com.xkcoding.mongodb.model
* @description: 文章实体类
* @author: yangkai.shen
* @date: Created in 2018-12-28 16:21
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Article {
/**
* 文章id
*/
@Id
private Long id;

/**
* 文章标题
*/
private String title;

/**
* 文章内容
*/
private String content;

/**
* 创建时间
*/
private Date createTime;

/**
* 更新时间
*/
private Date updateTime;

/**
* 点赞数量
*/
private Long thumbUp;

/**
* 访客数量
*/
private Long visits;

}

+ 29
- 0
spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/repository/ArticleRepository.java View File

@@ -0,0 +1,29 @@
package com.xkcoding.mongodb.repository;

import com.xkcoding.mongodb.model.Article;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

/**
* <p>
* 文章 Dao
* </p>
*
* @package: com.xkcoding.mongodb.repository
* @description: 文章 Dao
* @author: yangkai.shen
* @date: Created in 2018-12-28 16:30
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
public interface ArticleRepository extends MongoRepository<Article, Long> {
/**
* 根据标题模糊查询
*
* @param title 标题
* @return 满足条件的文章列表
*/
List<Article> findByTitleLike(String title);
}

+ 9
- 0
spring-boot-demo-mongodb/src/main/resources/application.yml View File

@@ -0,0 +1,9 @@
spring:
data:
mongodb:
host: localhost
port: 27017
database: article_db
logging:
level:
org.springframework.data.mongodb.core: debug

+ 156
- 0
spring-boot-demo-mongodb/src/test/java/com/xkcoding/mongodb/repository/ArticleRepositoryTest.java View File

@@ -0,0 +1,156 @@
package com.xkcoding.mongodb.repository;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Lists;
import com.xkcoding.mongodb.SpringBootDemoMongodbApplicationTests;
import com.xkcoding.mongodb.model.Article;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.util.List;
import java.util.stream.Collectors;

/**
* <p>
* 测试操作 MongoDb
* </p>
*
* @package: com.xkcoding.mongodb.repository
* @description: 测试操作 MongoDb
* @author: yangkai.shen
* @date: Created in 2018-12-28 16:35
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Slf4j
public class ArticleRepositoryTest extends SpringBootDemoMongodbApplicationTests {
@Autowired
private ArticleRepository articleRepo;

@Autowired
private MongoTemplate mongoTemplate;

@Autowired
private Snowflake snowflake;

/**
* 测试新增
*/
@Test
public void testSave() {
Article article = new Article(1L, RandomUtil.randomString(20), RandomUtil.randomString(150), DateUtil.date(), DateUtil
.date(), 0L, 0L);
articleRepo.save(article);
log.info("【article】= {}", JSONUtil.toJsonStr(article));
}

/**
* 测试新增列表
*/
@Test
public void testSaveList() {
List<Article> articles = Lists.newArrayList();
for (int i = 0; i < 10; i++) {
articles.add(new Article(snowflake.nextId(), RandomUtil.randomString(20), RandomUtil.randomString(150), DateUtil
.date(), DateUtil.date(), 0L, 0L));
}
articleRepo.saveAll(articles);

log.info("【articles】= {}", JSONUtil.toJsonStr(articles.stream()
.map(Article::getId)
.collect(Collectors.toList())));
}

/**
* 测试更新
*/
@Test
public void testUpdate() {
articleRepo.findById(1L).ifPresent(article -> {
article.setTitle(article.getTitle() + "更新之后的标题");
article.setUpdateTime(DateUtil.date());
articleRepo.save(article);
log.info("【article】= {}", JSONUtil.toJsonStr(article));
});
}

/**
* 测试删除
*/
@Test
public void testDelete() {
// 根据主键删除
articleRepo.deleteById(1L);

// 全部删除
articleRepo.deleteAll();
}

/**
* 测试点赞数、访客数,使用save方式更新点赞、访客
*/
@Test
public void testThumbUp() {
articleRepo.findById(1L).ifPresent(article -> {
article.setThumbUp(article.getThumbUp() + 1);
article.setVisits(article.getVisits() + 1);
articleRepo.save(article);
log.info("【标题】= {}【点赞数】= {}【访客数】= {}", article.getTitle(), article.getThumbUp(), article.getVisits());
});
}

/**
* 测试点赞数、访客数,使用更优雅/高效的方式更新点赞、访客
*/
@Test
public void testThumbUp2() {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(1L));
Update update = new Update();
update.inc("thumbUp", 1L);
update.inc("visits", 1L);
mongoTemplate.updateFirst(query, update, "article");

articleRepo.findById(1L)
.ifPresent(article -> log.info("【标题】= {}【点赞数】= {}【访客数】= {}", article.getTitle(), article.getThumbUp(), article
.getVisits()));
}

/**
* 测试分页排序查询
*/
@Test
public void testQuery() {
Sort sort = Sort.by("thumbUp", "updateTime").descending();
PageRequest pageRequest = PageRequest.of(0, 5, sort);
Page<Article> all = articleRepo.findAll(pageRequest);
log.info("【总页数】= {}", all.getTotalPages());
log.info("【总条数】= {}", all.getTotalElements());
log.info("【当前页数据】= {}", JSONUtil.toJsonStr(all.getContent()
.stream()
.map(article -> "文章标题:" + article.getTitle() + "点赞数:" + article.getThumbUp() + "更新时间:" + article.getUpdateTime())
.collect(Collectors.toList())));
}

/**
* 测试根据标题模糊查询
*/
@Test
public void testFindByTitleLike() {
List<Article> articles = articleRepo.findByTitleLike("更新");
log.info("【articles】= {}", JSONUtil.toJsonStr(articles));
}

}

Loading…
Cancel
Save