zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    MySQL开发索引创建规范
    如何从传统软件开发顺利过渡到互联网技术开发
    Java中return返回结果的优先级
    mongodb c++ driver 2.0编译使用
    Android MediaScannerJNI源代码具体解释
    构建你的长寿命的API第1部分:规范驱动的API开发
    CoreImage 中的模糊滤镜
    C++编程技巧降低编译时间
    我们年轻,阳光免费
    验证时出错。HRESULT = &#39;8000000A&#39;
  • 原文地址:https://www.cnblogs.com/tangzhe/p/8599536.html
Copyright © 2011-2022 走看看