MongoDb学习(四)--Repository
在学习这个的时候。关于Repository的映射。在备注xml的时候出现了错误。
错误有点坑。以后写的时候注意一点,在学习的时候。用的mongo的jar包版本比较低。
然而本机操作的时候,用的是最新版。其xml的配置发生的变化。
关于配置的信息。在配置的时候去官网查一下当前版本的使用方法。
这里记录一下spring-data-mongodb 的使用方法。增删改查。语法使用等。
通过学习这个。发现spring的好处。降低了开发门槛。而且可以提高开发的速度。还是不错的。
在前面几次学习中。都是使用的原生方法进行查询。这次换一种全新的方法。
基本操作就是创建一个自定义Repository的接口。让他继承与CrudRepository。
然后里面有附带的一些增删改查的方法。
这个最大的好处就是我们只用关注业务逻辑和接口的定义即可。
开发的时候,可以直接写接口。然后不用去写实现类,除非有复杂的方法有实现。
当然,这个接口里面的方法不是随便写的。而是有标准与规范的。具体写法,可以去官网查询api文档
当前版本
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
配置文件,版本不同,配置文件不同
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation=
"http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Default bean name is 'mongo' --> <mongo:mongo-client host="localhost" port="27017"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoClient"/>
<constructor-arg name="databaseName" value="chaoba"/>
</bean> <mongo:repositories base-package="SpringMogo.mongo" />
</beans>
List<Chaoba> findByName(String name);//根据条件查询
List<Chaoba> findByNameAndSex(String name,String sex);//and查询
List<Chaoba> findByNameAndSexAndAge(String name,String sex,String age);//多个and查询
List<Chaoba> findByNameOrSex(String name,String sex);//or查询
List<Chaoba> findByName(String name,Pageable page);//分页查询
List<Chaoba> findByName(String name,Sort sort);//排序查询 List<Chaoba> findTop2ByName(String name);//查询前几条
本次学习代码如下
ChaobaRepository类
package SpringMogo.mongo; import java.util.List; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository; @Repository("ChaobaRepository")
public interface ChaobaRepository extends CrudRepository<Chaoba, String> { List<Chaoba> findByName(String name);// 根据条件查询 List<Chaoba> findByNameAndSex(String name, String sex);// and查询 List<Chaoba> findByNameAndSexAndAge(String name, String sex, String age);// 多个and查询 List<Chaoba> findByNameOrSex(String name, String sex);// or查询 List<Chaoba> findByName(String name, Pageable page);// 分页查询 List<Chaoba> findByName(String name, Sort sort);// 排序查询 List<Chaoba> findTop2ByName(String name);// 查询前几条 }
实体类
package SpringMogo.mongo; import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field; @Document(collection = "chaoba1")
public class Chaoba {
@Id
private String id;
@Field("name")
private String name;
@Field("sex")
private String sex;
@Field("age")
private String age; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} }
测试类
package SpringMogo.mongo; import java.util.List; import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order; /**
* Hello world!
*
*/
public class App { private static ChaobaRepository chaobaRepository; static {
chaobaRepository = (ChaobaRepository) new ClassPathXmlApplicationContext("classpath:spring.xml")
.getBean("ChaobaRepository");
} public static void main(String[] args) {
System.out.println(chaobaRepository.count()); // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸");
// And查询
// List<Chaoba> result=
// chaobaRepository.findByNameAndSexAndAge("chaoba4565","男","20");
// Or查询
// List<Chaoba> result= chaobaRepository.findByNameOrSex("chaoba4565","女");
// 分页查询
// List<Chaoba> result= chaobaRepository.findByName("暮雪超霸",new PageRequest(1,
// 5));
// 排序查询
// List<Chaoba> result= chaobaRepository.findByName("暮雪超霸",new
// Sort(Order.asc("title"))); // Top查询
List<Chaoba> result = chaobaRepository.findTop2ByName("暮雪超霸"); for (Chaoba chaoba : result) {
System.out.println(chaoba.getName());
}
}
}
MongoDb学习(四)--Repository的更多相关文章
- [转载]MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
本文介绍数据库的4个基本操作:创建.读取.更新和删除(CRUD). 接下来的数据库操作演示,我们使用MongoDB自带简洁但功能强大的JavaScript shell,MongoDB shell是一个 ...
- MongoDB 学习四 : 查询(续)
接着上章,继续介绍MongoDB的查询. Querying on Embedded Documents 有两种方式查询嵌入式的子Documents:查询整个Document或者查询个别的键值对. 查询 ...
- mongodb学习(四)CRUD操作
CRUD操作: 1. 插入操作: 直接使用 insert可执行单个操作,也可以执行批量操作 书上的batchInsert会报错.似乎被废弃了. db.foo.insert({"bar&quo ...
- MongoDB学习(四)客户端工具备份数据库
在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...
- MongoDB学习笔记(四)--索引 && 性能优化
索引 基础索引 ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB学习笔记(转)
MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...
- MongoDB学习路线
转载博客: 1.MongoDB学习笔记(一)MongoDB概述和安装 http://www.cnblogs.com/wupeiqi/archive/2013/05/12/3074478.html 2. ...
- MongoDB学习笔记(五)--复制集 && sharding分片
主从复制 主从节点开启 主节 ...
- MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁
权限 绑定内网I ...
随机推荐
- ActiveMQ Cannot send, channel has already failed: tcp:127.0.0.1:8161
仅针对如下错误内容: Cannot send, channel has already failed: tcp://127.0.0.1:8161 一种尝试解决,修改连接端口为 61616: tcp:/ ...
- CoProcessFunction实战三部曲之二:状态处理
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- pthread 互斥量
参考文献: [1] https://computing.llnl.gov/tutorials/pthreads/ 温故知新 在 OS 中,每个进程都独立地拥有: Process ID, process ...
- python批量definition query
import arcpy mxd = arcpy.mapping.MapDocument("current") for lyr in arcpy.mapping.ListLayer ...
- 音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性
toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...
- PyQt学习随笔:通过自定义类重写QApplication的notify方法捕获应用的所有消息
PyQt程序通过调用QApplication类的exec_()(sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvent ...
- PyQt(Python+Qt)学习随笔:formLayout的layoutLabelAlignment 属性
一.引言 Qt Designer的表单布局(formLayout)中,layoutLabelAlignment 用于控制表单布局中标签的水平对齐方式(包括垂直和水平方向两个方向).如图: 此属性实际对 ...
- 再也不怕 JavaScript 报错了,怎么看怎么处理都在这
在开发中,有时,我们花了几个小时写的 JS 代码,在游览器调试一看,控制台一堆红,瞬间一万头草泥马奔腾而来.至此,本文主要记录 JS 常见的一些报错类型,以及常见的报错信息,分析其报错原因,并给予处理 ...
- 移动端web网页meta设置
<meta charset='utf-8'><!-- 声明文档使用的字符编码 --> <meta http-equiv="X-UA-Compatible&quo ...