MongoDB学习-->Spring Data Mongodb框架之Repository

application-dev.yml

server:
port: 8888

mongo:
host: localhost
port: 27017
timeout: 60000
db: mamabike

配置类

  1 package com.tangzhe.configuration;
  2 
  3 import com.mongodb.MongoClient;
  4 import com.mongodb.MongoClientOptions;
  5 import com.mongodb.ServerAddress;
  6 import com.tangzhe.autoid.SaveMongoEventListener;
  7 import lombok.Data;
  8 import org.springframework.boot.context.properties.ConfigurationProperties;
  9 import org.springframework.context.annotation.Bean;
 10 import org.springframework.context.annotation.Configuration;
 11 import org.springframework.data.mongodb.core.MongoTemplate;
 12 import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
 13 import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
 14 import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
 15 import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
 16 import org.springframework.data.mongodb.gridfs.GridFsTemplate;
 17 
 18 /**
 19  * Created by 唐哲
 20  * 2018-03-13 17:20
 21  * MongoDB配置
 22  */
 23 @Configuration
 24 @ConfigurationProperties(prefix = "mongo")
 25 @Data
 26 public class MongoDBConfiguration {
 27 
 28     //mongodb服务地址
 29     private String host;
 30 
 31     //mongodb服务端口号
 32     private Integer port;
 33 
 34     //连接超时
 35     private Integer timeout;
 36 
 37     //mongodb数据库名
 38     private String db;
 39 
 40     /**
 41      * 配置MongoDB模板
 42      */
 43     @Bean
 44     public MongoTemplate mongoTemplate(SimpleMongoDbFactory mongoDbFactory,
 45                                        MappingMongoConverter mappingMongoConverter) {
 46         return new MongoTemplate(mongoDbFactory, mappingMongoConverter);
 47     }
 48 
 49     /**
 50      * 配置自增ID监听器
 51      */
 52     @Bean
 53     public SaveMongoEventListener saveMongoEventListener() {
 54         return new SaveMongoEventListener();
 55     }
 56 
 57     /**
 58      * 配置GridFs模板,实现文件上传下载
 59      */
 60     @Bean
 61     public GridFsTemplate gridFsTemplate(SimpleMongoDbFactory mongoDbFactory,
 62                                          MappingMongoConverter mappingMongoConverter) {
 63         return new GridFsTemplate(mongoDbFactory, mappingMongoConverter);
 64     }
 65 
 66     /**
 67      * 配置mongoDbFactory
 68      */
 69     @Bean
 70     public SimpleMongoDbFactory mongoDbFactory() {
 71         MongoClientOptions options = MongoClientOptions.builder().connectTimeout(timeout).build();
 72         MongoClient client = new MongoClient(new ServerAddress(host, port), options);
 73         return new SimpleMongoDbFactory(client, db);
 74     }
 75 
 76     /**
 77      * 配置mongoMappingContext
 78      */
 79     @Bean
 80     public MongoMappingContext mongoMappingContext() {
 81         return new MongoMappingContext();
 82     }
 83 
 84     /**
 85      * 配置defaultMongoTypeMapper
 86      */
 87     @Bean
 88     public DefaultMongoTypeMapper defaultMongoTypeMapper() {
 89         //去掉_class字段
 90         return new DefaultMongoTypeMapper(null);
 91     }
 92 
 93     /**
 94      * 配置mappingMongoConverter
 95      */
 96     @Bean
 97     public MappingMongoConverter mappingMongoConverter(SimpleMongoDbFactory mongoDbFactory,
 98                                                        MongoMappingContext mongoMappingContext,
 99                                                        DefaultMongoTypeMapper defaultMongoTypeMapper) {
100         MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(mongoDbFactory, mongoMappingContext);
101         mappingMongoConverter.setTypeMapper(defaultMongoTypeMapper);
102         return mappingMongoConverter;
103     }
104 
105 }

实体类

 1 package com.tangzhe.repository;
 2 
 3 import lombok.Data;
 4 import org.springframework.data.annotation.Id;
 5 import org.springframework.data.mongodb.core.mapping.Document;
 6 import org.springframework.data.mongodb.core.mapping.Field;
 7 
 8 import java.util.Date;
 9 import java.util.List;
10 
11 /**
12  * Created by 唐哲
13  * 2018-03-13 17:40
14  */
15 @Document(collection = "article_info")
16 @Data
17 public class Article {
18 
19     @Id
20     private String id;
21 
22     @Field("title")
23     private String title;
24 
25     @Field("v_count")
26     private Long visitCount;
27 
28     @Field("tags")
29     private List<String> tags;
30 
31     @Field("add_time")
32     private Date addTime;
33 
34 }

repository类

 1 package com.tangzhe.repository;
 2 
 3 import org.springframework.data.domain.Pageable;
 4 import org.springframework.data.domain.Sort;
 5 import org.springframework.data.repository.CrudRepository;
 6 
 7 import java.util.List;
 8 
 9 /**
10  * Created by 唐哲
11  * 2018-03-14 22:04
12  */
13 public interface ArticleRepository extends CrudRepository<Article, String> {
14 
15     List<Article> findByTitle(String title);
16 
17     List<Article> findByTitleAndVisitCount(String title, Long visitCount);
18 
19     /** 分页查询 */
20     List<Article> findByTitle(String title, Pageable pageable);
21 
22     /** 排序 */
23     List<Article> findByTitle(String title, Sort sort);
24 
25     /** 查询头一条 */
26     List<Article> findTop1ByTitle(String title);
27 
28     /** 查询头二条 */
29     List<Article> findTop2ByTitle(String title);
30 
31 }

测试repository

 1 package com.tangzhe.repository;
 2 
 3 import org.junit.Test;
 4 import org.junit.runner.RunWith;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.boot.test.context.SpringBootTest;
 7 import org.springframework.data.domain.PageRequest;
 8 import org.springframework.data.domain.Sort;
 9 import org.springframework.test.context.junit4.SpringRunner;
10 
11 import java.util.Date;
12 import java.util.Iterator;
13 import java.util.List;
14 
15 /**
16  * Created by 唐哲
17  * 2018-03-14 22:07
18  */
19 @RunWith(SpringRunner.class)
20 @SpringBootTest
21 public class ArticleRepositoryTest {
22 
23     @Autowired
24     private ArticleRepository articleRepository;
25 
26     //@Test
27     public void repositoryTest() {
28         System.out.println(articleRepository.count());
29 
30         Iterator<Article> iterator = articleRepository.findAll().iterator();
31         while (iterator.hasNext()) {
32             Article article = iterator.next();
33             System.out.println(article);
34         }
35     }
36 
37     //@Test
38     public void testFindByTitle() {
39         List<Article> list = articleRepository.findByTitle("猿天地实战课程1");
40         System.out.println(list.size());
41     }
42     
43     //@Test
44     public void testSave() {
45         Article article = new Article();
46         article.setTitle("猿天地实战课程1");
47         article.setAddTime(new Date());
48         article.setVisitCount(100L);
49         article = articleRepository.save(article);
50         System.out.println(article);
51     }
52 
53     //@Test
54     public void testFindByTitleAndVisitCount() {
55         List<Article> list = articleRepository.findByTitleAndVisitCount("猿天地实战课程1", 10L);
56         System.out.println(list.size());
57     }
58 
59     //@Test
60     public void testPageable() {
61         List<Article> list = articleRepository.findByTitle("猿天地实战课程1", new PageRequest(0, 2));
62         System.out.println(list.size());
63     }
64 
65     //@Test
66     public void testSort() {
67         List<Article> list = articleRepository.findByTitle("猿天地实战课程1", new Sort(new Sort.Order(Sort.Direction.DESC, "visitCount")));
68         for(Article article : list) {
69             System.out.println(article.getVisitCount());
70         }
71     }
72 
73     //@Test
74     public void testFindTop1ByTitle() {
75         List<Article> list = articleRepository.findTop1ByTitle("猿天地实战课程1");
76         System.out.println(list.size());
77     }
78 
79     //@Test
80     public void testFindTop2ByTitle() {
81         List<Article> list = articleRepository.findTop2ByTitle("猿天地实战课程1");
82         System.out.println(list.size());
83     }
84 
85 }
原文地址:https://www.cnblogs.com/tangzhe/p/8599536.html