forked from xkcoding/spring-boot-demo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
301 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
...oot-demo-mongodb/src/main/java/com/xkcoding/mongodb/SpringBootDemoMongodbApplication.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,35 @@ | ||
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 { | ||
|
||
public static void main(String[] args) { | ||
SpringApplication.run(SpringBootDemoMongodbApplication.class, args); | ||
} | ||
|
||
@Bean | ||
public Snowflake snowflake() { | ||
return IdUtil.createSnowflake(1, 1); | ||
} | ||
|
||
} | ||
|
65 changes: 65 additions & 0 deletions
65
spring-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/model/Article.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 changes: 29 additions & 0 deletions
29
...ng-boot-demo-mongodb/src/main/java/com/xkcoding/mongodb/repository/ArticleRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
spring: | ||
data: | ||
mongodb: | ||
host: localhost | ||
port: 27017 | ||
database: article_db | ||
logging: | ||
level: | ||
org.springframework.data.mongodb.core: debug |
156 changes: 156 additions & 0 deletions
156
...oot-demo-mongodb/src/test/java/com/xkcoding/mongodb/repository/ArticleRepositoryTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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)); | ||
} | ||
|
||
} |