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 ...
随机推荐
- 写给程序员的机器学习入门 (十) - 对象识别 Faster-RCNN - 识别人脸位置与是否戴口罩
每次看到大数据人脸识别抓逃犯的新闻我都会感叹技术发展的太快了,国家治安水平也越来越好了
- 冰河开源了全网首个完全开源的分布式全局有序序列号(分布式ID)框架!!
写在前面 mykit-serial框架的设计参考了李艳鹏大佬开源的vesta框架,并彻底重构了vesta框架,借鉴了雪花算法(SnowFlake)的思想,并在此基础上进行了全面升级和优化.支持嵌入式( ...
- moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...
- 第15.36节 PyQt(Python+Qt)入门学习:containers容器类部件QFrame框架部件介绍
一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有如下: 容器中的Frame为一个矩形的框架对象,对应类QFrame,QFrame类是PyQt中带框架 ...
- 第8.34节 《Python类中常用的特殊变量和方法》总结
本章介绍了Python类中常用的特殊变量和方法,这些特殊变量和方法都有特殊的用途,是Python强大功能的基石之一,许多功能非常有Python特色.由于Python中一切皆对象,理解这些特殊变量和方法 ...
- PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Model/View架构中的Model模型Model与数据源通信,为体系结构中的其他组件提供数据接口 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的windowIcon属性
windowIcon对象为部件对象的属性,但只有窗口对象有效,其他派生对象如pushButtong对象无效. 在windowIcon对象上有如下子属性设置: 这几个子属性实际上是QIcon类中继承的. ...
- edusrc上海交通大学证书
- 用STM32定时器测量信号频率——测频法和测周法[原创cnblogs.com/helesheng]
工业测试与控制系统中,经常需要对未知信号的频率进行测试.对于10MHz以下的信号,用单片机(MCU)定时器完成这项任务显然是最常见和最佳的选择.目前性价比最高的单片机STM32拥有功能强大且数量众多的 ...
- Java 线程安全问题的本质
原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 目录: 线程安全问题的本质 理解CPU JVM虚拟机类比于操作系统 重排序 汇总 一些解释 ...