前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring-data-mongodb之Repositor操作数据

spring-data-mongodb之Repositor操作数据

作者头像
猿天地
发布2018-04-03 12:28:39
1.2K0
发布2018-04-03 12:28:39
举报
文章被收录于专栏:猿天地

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

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

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

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

代码语言:javascript
复制
<mongo:repositories base-package="com.cxytiandi.mongo.repository" />

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

代码语言:javascript
复制
@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。

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

代码语言:javascript
复制
/**
  * 查询所有
  * @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());
      }
 }

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档