使用MongoDB如何对Spring进行整合

本篇文章给大家分享的是有关使用MongoDB如何对Spring进行整合,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

创新互联公司专注于企业成都营销网站建设、网站重做改版、镇江网站定制设计、自适应品牌网站建设、html5商城网站制作、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为镇江等各大城市提供网站开发制作服务。

添加依赖


   org.springframework.data
   spring-data-mongodb
   1.10.3.RELEASE

其余Spring相关的忽略

Spring的配置applicationContext-mongo.xml



  

  
    
  

  
  
  
    
      
      
    
  

  
  
  
  

  
  
    
    
  

mongo:mongo-client是定义MongoDB的客户端连接,需要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 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 {

  //分页查询
  public Page
 findAll(Pageable pageable);   //根据author查询   public List
 findByAuthor(String author);   //根据作者和标题查询   public List
 findByAuthorAndTitle(String author, String title);   //忽略参数大小写   public List
 findByAuthorIgnoreCase(String author);   //忽略所有参数大小写   public List
 findByAuthorAndTitleAllIgnoreCase(String author, String title);   //排序   public List
 findByAuthorOrderByVisitCountDesc(String author);   public List
 findByAuthorOrderByVisitCountAsc(String author);   //自带排序条件   public List
 findByAuthor(String author, Sort sort); }

Spring的data repository封装了一套增删改查的方法,就和JPA实现的一样,ArticleRepository继承PagingAndSortingRepository,就集成了常用的增删改查方法,比如save、findOne、exists、findAll、delete等等,可以采用默认实现方式来完成常用的增删改查操作。

测试上述各个方法ArticleRepositoryTest.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
 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
 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
 articles = articleRepository.findByAuthor("kcy2");     articleRepository.delete(articles);   }   /**    * 查询所有    *    * @author 孔垂云    */   @Test   public void findAll() {     Iterable
 articles = articleRepository.findAll();     articles.forEach(article -> {       System.out.println(article.toString());     });   }   /**    * 根据author查询    *    * @author 孔垂云    */   @Test   public void findByAuthor() {     List
 articles = articleRepository.findByAuthor("kcy");     articles.forEach(article -> {       System.out.println(article.toString());     });   }   /**    * 按照author和title查询    *    * @author 孔垂云    */   @Test   public void findByAuthorAndTitle() {     List
 articles = articleRepository.findByAuthorAndTitle("kcy", "MongoTemplate的基本使用");     articles.forEach(article -> {       System.out.println(article.toString());     });   }   /**    * 根据作者查询,忽略大小写    *    * @author 孔垂云    */   @Test   public void findByAuthorIgnoreCase() {     List
 articles = articleRepository.findByAuthorIgnoreCase("JASON");     articles.forEach(article -> {       System.out.println(article.getId());     });   }   /**    * 忽略所有参数的大小写    *    * @author 孔垂云    */   @Test   public void findByAuthorAndTitleAllIgnoreCase() {     List
 articles = articleRepository.findByAuthorAndTitleAllIgnoreCase("KCY", "MONGOTEMPLATE的基本使用");     articles.forEach(article -> {       System.out.println(article.toString());     });   }   /**    * 根据author查询,并且以访问次数降序排序显示    *    * @author 孔垂云    */   @Test   public void findByAuthorOrderByVisitCountDesc() {     List
 articles = articleRepository.findByAuthorOrderByVisitCountDesc("kcy");     articles.forEach(article -> {       System.out.println(article.toString());     });   }   /**    * 根据作者查询,并且以访问次数升序排序显示    *    * @author 孔垂云    */   @Test   public void findByAuthorOrderByVisitCountAsc() {     List
 articles = articleRepository.findByAuthorOrderByVisitCountAsc("kcy");     articles.forEach(article -> {       System.out.println(article.toString());     });   }   /**    * 自带排序条件    *    * @author 孔垂云    */   @Test   public void findByAuthorBySort() {     List
 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
 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查找、按标题查询、分页等等。

以上就是使用MongoDB如何对Spring进行整合,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


标题名称:使用MongoDB如何对Spring进行整合
分享URL:http://scyanting.com/article/gejhgh.html