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());
}
}
当然我这边只是列出来一些最基本的用法,还有很多用法我把官方文档上的示列给大家贴出来。
- linux 系统监控、诊断工具之 top 详解
- 一个二进制POC的诞生之旅CVE-2018-0802
- 远程RPC溢出EXP编写实战之MS06-040
- 浮点数加法引发的问题:浮点数的二进制表示
- 新手科普 | MySQL手工注入之基本注入流程
- linux 系统监控、诊断工具之 lsof 用法简介
- 关于 SimpleDateFormat 的非线程安全问题及其解决方案
- 关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享
- Java线程使用技巧学习(一)
- Python FAQ(常见问题解答)(1)
- ElastAlert监控日志告警Web攻击行为
- Java线程使用技巧学习(二)
- 挖洞经验 | 看我如何发现“小火车托马斯”智能玩具APP聊天应用漏洞
- Hive 常见问题与技巧【Updating】
- 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 数组属性和方法
- 【自然语言处理】利用LDA对希拉里邮件进行主题分析
- 学以致用C++设计模式 之 “代理模式”
- 学以致用C++设计模式 “模板方法模式”
- 学以致用C++设计模式 “抽象工厂模式”
- 学以致用C++设计模式 之 “工厂模式”
- 六大原则不熟?那你学什么设计模式?来来来,赶紧来!
- 精品:TCP连接的建立和终止
- python--几种快速排序的实现以及运行时间比较
- TCP/IP详解 -奠基篇
- 段错误?打的就是段错误!!
- (Graph)图,挑着看看
- Mybatis学习笔记(四)调用存储过程
- 跟我一起 自己种一颗 AVL树(平衡二叉搜索树)吧!
- mybatis文件映射之利用collection定义关联集合(五)
- 【奇技淫巧】 -- 原地旋转数组