spring-data-mongodb之Repositor操作数据

时间:2022-05-06
本文章向大家介绍spring-data-mongodb之Repositor操作数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前面几天我们都在学习使用mongoTemplate来操作数据库,其实data框架提供了很多种方式,mongoTemplate只是其中一种,今天我们来学习下使用Repositor操作数据库。

Repositor其实就类似于hibernate这种框架,主要目的就是为了提高开发效率,让开发者使用起来更加的简单,但是我个人不太推荐使用这种方式,这种方式确实显得有点傻瓜式了,而且对于比如说后期进公司的新人来说,不懂它这种规律是无法去改造的。

说了这么多我们开始学习吧。

首先我们在之前定义的applicationContent.xml中添加Repositor的配置 指定repository所在的包

<mongo:repositories base-package="com.cxytiandi.mongo.repository" />

然后在配置的包中新建个repository的接口

@Repository("ArticleRepositor")
public interface ArticleRepositor 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);

}

大家能看到接口中定义了很多种的查询方式 不知道大家有发现规律没,这边所有的查询方法都以find开头,比如说findAll()表示查询所有。 如果我们要根据某个字段去查询就使用findByAuthor author就是你要查询的字段,如果多个字段的话就是findBy字段1And字段2。 然后还有就是排序什么的,忽略大小写,模糊查询等等都有类似的语法。 看起来是不是很简单,只要掌握它的规律就行,即使你完全不懂mongodb的语法也能去操作mongodb。

下面我给出调用的示列,大家一看就明白了

/**
  * 查询所有
  * @author yinjihuan
  */
 private static void findAll() {
      Iterable<Article> articles = articleRepositor.findAll();
      articles.forEach(article ->{
         System.out.println(article.getId());
      });
 } 
/**
  * 根据作者查询
  * @author yinjihuan
  */
 private static void findByAuthor() {
      List<Article> articles = articleRepositor.findByAuthor("jason");
      articles.forEach(article ->{
         System.out.println(article.getId());
      });
 }
 /**
  * 分解作者和标题查询
  * @author yinjihuan
  */
 private static void findByAuthorAndTitle() {
      List<Article> articles = articleRepositor.findByAuthorAndTitle("yinjihuan", "MongoTemplate的基本使用");
      articles.forEach(article ->{
         System.out.println(article.getId());
      });
 } 
 /**
  * 根据作者查询,忽略大小写
  * @author yinjihuan
  */
 private static void findByAuthorIgnoreCase() {
      List<Article> articles = articleRepositor.findByAuthorIgnoreCase("JASON");
      articles.forEach(article ->{
         System.out.println(article.getId());
      });
 } 
 /**
  * 忽略所有参数的大小写
  * @author yinjihuan
  */
 private static void findByAuthorAndTitleAllIgnoreCase() {
      List<Article> articles = articleRepositor.findByAuthorAndTitleAllIgnoreCase("JASON", "MONGOTEMPLATE的基本使用");
      articles.forEach(article ->{
         System.out.println(article.getId());
      });
 } 
 /**
  * 根据作者查询,并且以访问次数降序排序显示
  * @author yinjihuan
  */
 private static void findByAuthorOrderByVisitCountDesc() {
      List<Article> articles =  articleRepositor.findByAuthorOrderByVisitCountDesc("yinjihuan");
      articles.forEach(article ->{
         System.out.println(article.getAuthor());
      });
 } 
 /**
  * 根据作者查询,并且以访问次数升序排序显示
  * @author yinjihuan
  */
 private static void findByAuthorOrderByVisitCountAsc() {
      List<Article> articles = articleRepositor.findByAuthorOrderByVisitCountAsc("yinjihuan");
      articles.forEach(article ->{
         System.out.println(article.getAuthor());
      });
 } 
 /**
  * 自带排序条件
  * @author yinjihuan
  */
 private static void findByAuthorBySort() {
      List<Article> articles = articleRepositor.findByAuthor("yinjihuan", new Sort(Direction.ASC, "VisitCount"));
      articles.forEach(article ->{
         System.out.println(article.getAuthor());
      });
 } 
 /**
  * 分页查询所有,并且排序
  */
 private static void findByPage() {      
      int page = 1;      
      int size = 2;
      Pageable pageable = new PageRequest(page, size,new Sort(Direction.ASC, "VisitCount"));
      Page<Article> pageInfo = articleRepositor.findAll(pageable);      
      //总数量
      System.out.println(pageInfo.getTotalElements());      
      //总页数
      System.out.println(pageInfo.getTotalPages());      
      for (Article article : pageInfo.getContent()) {
         System.out.println(article.getAuthor());
      }
 }

当然我这边只是列出来一些最基本的用法,还有很多用法我把官方文档上的示列给大家贴出来。