MongoDB 와 Spring 이 통합 한 인 스 턴 스 코드 를 자세히 알 아 보 세 요.

12346 단어 MongoDBSpring
MongoDB 는 현재 매우 많이 사용 되 고 있 으 며 스프링 과 어떻게 통합 하 느 냐 도 자주 부 딪 히 는 문제 다.
Spring 은MongoTemplate이러한 템 플 릿 류 의 실현 방법 을 제공 하여 구체 적 인 조작 을 간소화 했다.
구체 적 인 실현 에 대해 말씀 드 리 겠 습 니 다.
의존 도 를 높이다

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-mongodb</artifactId>
   <version>1.10.3.RELEASE</version>
</dependency>
나머지 Spring 관련 무시
Spring 설정 applicationContext-mongo.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
  <context:property-placeholder
      ignore-unresolvable="true" location="classpath:/mongodb.properties"/>

  <mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}">
    <!-- credentials="${mongo.user}:${mongo.pwd}@${mongo.defaultDbName}"-->
  </mongo:mongo-client>

  <mongo:db-factory id="mongoDbFactory"
           dbname="${mongo.database}"
           mongo-ref="mongoClient"/>
  <!--   Mongodb     -->
  <bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
    <constructor-arg name="typeKey">
      <!--       ,    spring data mongodb      _class     -->
      <null/>
    </constructor-arg>
  </bean>

  <mongo:repositories base-package="com.critc.mongo"/>
  <!--          Doucment     -->
  <mongo:mapping-converter id="mappingConverter" base-package="com.critc.mongo.model"
               type-mapper-ref="defaultMongoTypeMapper">
  </mongo:mapping-converter>

  <!-- Mongodb    -->
  <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="mappingConverter"/>
  </bean>
</beans>

mongo:mongo-clientMongoDB 를 정의 하 는 클 라 이언 트 연결 로 host 와 port 인자 가 필요 합 니 다.계 정 비밀번호 가 필요 하 다 면 credentials 설정 을 추가 해 야 합 니 다.mongo:db-factory연결 공장 을 설정 하고 구체 적 인 연결 데이터 베 이 스 를 지정 합 니 다.이 예 는 기본적으로 test 입 니 다.defaultMongoTypeMapper기본 Mongodb 형식 맵mongo:mapping-converterMongoDB의 실체 맵mongoTemplate이것 은 가장 중요 한 것 으로 템 플 릿 류 를 정의 하고 공장 과 실체 맵 에 의존 합 니 다.
여기에 article 의 첨삭 과 수정 검사 의 예 를 들 겠 습 니 다.
관련 실체 Article.java

@Document(collection = "article_info")
public class Article {
  @Id
  private String id;//id
  @Field("title")
  private String title;//  
  @Field("url")
  private String url;//  
  @Field("author")
  private String author;//  
  @Field("tags")
  private List<String> tags;//tag   
  @Field("visit_count")
  private Long visitCount;//    
  @Field("add_time")
  private Date addTime;//    
// get set    
@Document(collection = "article_info")이 주 해 는 Hibernate 의 주해Entiry와 매우 비슷 하 다.바로 하나의 문 서 를 정의 하 는 것 이다.대상 MongoDB 에 저 장 된 Collection 의 이름 은article_info이다.
@Id 는 이 필드 가 주 키 이 므 로 빠 질 수 없습니다.
@Field("add_time")는 이 필드 가 MongoDB 의 실제 필드 를 비 추 는 것 을 말 하 며,일치 하면 생략 할 수 있다.
ArticleRepository 실제 액세스 인터페이스

@Repository("ArticleRepository")
public interface ArticleRepository extends PagingAndSortingRepository<Article, String> {

  //    
  public Page<Article> findAll(Pageable pageable);


  //  author  
  public List<Article> findByAuthor(String author);

  //         
  public List<Article> findByAuthorAndTitle(String author, String title);

  //       
  public List<Article> findByAuthorIgnoreCase(String author);

  //         
  public List<Article> findByAuthorAndTitleAllIgnoreCase(String author, String title);

  //  
  public List<Article> findByAuthorOrderByVisitCountDesc(String author);
  public List<Article> findByAuthorOrderByVisitCountAsc(String author);

  //      
  public List<Article> findByAuthor(String author, Sort sort);

}

Spring 의 data reposcory 는 JPA 가 실현 한 것 과 마찬가지 로ArticleRepository계승PagingAndSortingRepository은 자주 사용 하 는 첨삭 검사 방법 을 집성 했다.예 를 들 어 save,findOne,exists,findAll,delete 등 은 기본 적 인 실현 방식 으로 자주 사용 하 는 첨삭 검사 작업 을 완성 할 수 있다.
상기 각 방법 을 테스트 합 니 다 ArticleRepository Test.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext-mongo.xml"})
public class ArticleRepositoryTest {

  @Autowired
  private ArticleRepository articleRepository;

  /**
   *     
   */
  @Test
  public void add() {
    //      
    Article article = new Article();
    article.setId("1");
    article.setTitle("MongoTemplate     ");
    article.setAuthor("kcy");
    article.setUrl("http://jianshu.com/");
    article.setTags(Arrays.asList("java", "mongodb", "spring"));
    article.setVisitCount(0L);
    article.setAddTime(new Date());
    articleRepository.save(article);

    //    
    List<Article> articles = new ArrayList<>(10);
    for (int i = 0; i < 10; i++) {
      Article article2 = new Article();
      article2.setId(String.valueOf(i + 1));
      article2.setTitle("MongoTemplate     ");
      article2.setAuthor("kcy");
      article2.setUrl("http://jianshu.com" + i);
      article2.setTags(Arrays.asList("java", "mongodb", "spring"));
      article2.setVisitCount(0L);
      article2.setAddTime(new Date());
      articles.add(article2);
    }
    articleRepository.save(articles);
  }

  /**
   *     ,  id 1     +1
   */
  @Test
  public void update() {
    Article article = articleRepository.findOne("1");
    article.setVisitCount(article.getVisitCount() + 1);
    articleRepository.save(article);
  }

  /**
   *     ,  author kcy      kcy2
   */
  @Test
  public void batchUpdate() {
    List<Article> articles = articleRepository.findByAuthor("kcy");
    articles.forEach(article -> {
      article.setAuthor("kcy2");
    });
    articleRepository.save(articles);
  }

  /**
   *     ,  id 10 
   */
  @Test
  public void delete() {
    Article article = articleRepository.findOne("10");
    articleRepository.delete(article);
  }

  @Test
  public void batchDelete() {
    List<Article> articles = articleRepository.findByAuthor("kcy2");
    articleRepository.delete(articles);
  }

  /**
   *     
   *
   * @author    
   */
  @Test
  public void findAll() {
    Iterable<Article> articles = articleRepository.findAll();
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }

  /**
   *   author  
   *
   * @author    
   */
  @Test
  public void findByAuthor() {
    List<Article> articles = articleRepository.findByAuthor("kcy");
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }

  /**
   *   author title  
   *
   * @author    
   */
  @Test
  public void findByAuthorAndTitle() {
    List<Article> articles = articleRepository.findByAuthorAndTitle("kcy", "MongoTemplate     ");
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }

  /**
   *       ,     
   *
   * @author    
   */
  @Test
  public void findByAuthorIgnoreCase() {
    List<Article> articles = articleRepository.findByAuthorIgnoreCase("JASON");
    articles.forEach(article -> {
      System.out.println(article.getId());
    });
  }

  /**
   *           
   *
   * @author    
   */
  @Test
  public void findByAuthorAndTitleAllIgnoreCase() {
    List<Article> articles = articleRepository.findByAuthorAndTitleAllIgnoreCase("KCY", "MONGOTEMPLATE     ");
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }

  /**
   *   author  ,             
   *
   * @author    
   */
  @Test
  public void findByAuthorOrderByVisitCountDesc() {
    List<Article> articles = articleRepository.findByAuthorOrderByVisitCountDesc("kcy");
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }


  /**
   *       ,             
   *
   * @author    
   */
  @Test
  public void findByAuthorOrderByVisitCountAsc() {
    List<Article> articles = articleRepository.findByAuthorOrderByVisitCountAsc("kcy");
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }

  /**
   *       
   *
   * @author    
   */
  @Test
  public void findByAuthorBySort() {
    List<Article> articles = articleRepository.findByAuthor("kcy", new Sort(Direction.ASC, "VisitCount"));
    articles.forEach(article -> {
      System.out.println(article.toString());
    });
  }

  /**
   *       ,    
   */
  @Test
  public void findByPage() {
    int page = 1;
    int size = 2;
    Pageable pageable = new PageRequest(page, size, new Sort(Direction.ASC, "VisitCount"));
    Page<Article> pageInfo = articleRepository.findAll(pageable);
    //   
    System.out.println(pageInfo.getTotalElements());
    //   
    System.out.println(pageInfo.getTotalPages());
    for (Article article : pageInfo.getContent()) {
      System.out.println(article.toString());
    }
  }
}

위의 코드 가 비교적 길 고 기본적으로 MongoDB 가 자주 사용 하 는 여러 가지 예 를 명확 하 게 말 했다.예 를 들 어 증가,대량 증가,수정,삭제,id 찾기,제목 조회,페이지 나 누 기 등 이다.
원본 코드 다운로드
본 공정 상세 소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기