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());
}
}
当然我这边只是列出来一些最基本的用法,还有很多用法我把官方文档上的示列给大家贴出来。
- 实体类的二进制序列化
- 多任务验证码识别
- 一加手机系统预装APP被曝存在后门
- 单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试
- 打造轻量级的实体类数据容器
- “设计应对变化”--实例讲解一个数据同步系统
- TOP语句放到表值函数外,效率异常低下
- 从吉日嘎拉那里学到的……
- 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的
- C#中?与??的区别
- 隐藏在程序旮旯中的“安全问题”
- 调用PostgreSQL存储过程,找不到函数名的问题
- C#调用C和C++函数的一点区别
- EF+MySQL乐观锁控制电商并发下单扣减库存,在高并发下的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Centos7.3服务器搭建LNMP环境的方法
- Linux中解除端口占用的方法
- ubuntu服务器环境下安装python的方法
- 带你入门Linux中size命令的6个例子
- 详解CentOS重启后resolv.conf被重置的解决方案
- scRNA-seq Clustering quality control(二)
- ubuntu环境下安装memcache及启动的方法
- Linux下批量修改服务器用户密码方法步骤
- Linux 常用文本处理命令和vim文本编辑器
- centos7利用yum安装lnmp的教程(linux+nginx+php7.1+mysql5.7)
- linux根据进程号PID查找启动程序的全路径
- linux服务器安装PHP扩展zip,zlib方法
- Lamp环境下设置绑定apache域名的方法分析
- Linux杀不死的进程之CPU使用率700%解决方法
- 解读Linux下ip命令展示的网络连接信息