MongoDB学习-->Spring Data Mongodb框架之Repository
application-dev.yml
server:
port: 8888
mongo:
host: localhost
port: 27017
timeout: 60000
db: mamabike
配置类
package com.tangzhe.configuration; import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.tangzhe.autoid.SaveMongoEventListener;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.gridfs.GridFsTemplate; /**
* Created by 唐哲
* 2018-03-13 17:20
* MongoDB配置
*/
@Configuration
@ConfigurationProperties(prefix = "mongo")
@Data
public class MongoDBConfiguration { //mongodb服务地址
private String host; //mongodb服务端口号
private Integer port; //连接超时
private Integer timeout; //mongodb数据库名
private String db; /**
* 配置MongoDB模板
*/
@Bean
public MongoTemplate mongoTemplate(SimpleMongoDbFactory mongoDbFactory,
MappingMongoConverter mappingMongoConverter) {
return new MongoTemplate(mongoDbFactory, mappingMongoConverter);
} /**
* 配置自增ID监听器
*/
@Bean
public SaveMongoEventListener saveMongoEventListener() {
return new SaveMongoEventListener();
} /**
* 配置GridFs模板,实现文件上传下载
*/
@Bean
public GridFsTemplate gridFsTemplate(SimpleMongoDbFactory mongoDbFactory,
MappingMongoConverter mappingMongoConverter) {
return new GridFsTemplate(mongoDbFactory, mappingMongoConverter);
} /**
* 配置mongoDbFactory
*/
@Bean
public SimpleMongoDbFactory mongoDbFactory() {
MongoClientOptions options = MongoClientOptions.builder().connectTimeout(timeout).build();
MongoClient client = new MongoClient(new ServerAddress(host, port), options);
return new SimpleMongoDbFactory(client, db);
} /**
* 配置mongoMappingContext
*/
@Bean
public MongoMappingContext mongoMappingContext() {
return new MongoMappingContext();
} /**
* 配置defaultMongoTypeMapper
*/
@Bean
public DefaultMongoTypeMapper defaultMongoTypeMapper() {
//去掉_class字段
return new DefaultMongoTypeMapper(null);
} /**
* 配置mappingMongoConverter
*/
@Bean
public MappingMongoConverter mappingMongoConverter(SimpleMongoDbFactory mongoDbFactory,
MongoMappingContext mongoMappingContext,
DefaultMongoTypeMapper defaultMongoTypeMapper) {
MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(mongoDbFactory, mongoMappingContext);
mappingMongoConverter.setTypeMapper(defaultMongoTypeMapper);
return mappingMongoConverter;
} }
实体类
package com.tangzhe.repository; import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field; import java.util.Date;
import java.util.List; /**
* Created by 唐哲
* 2018-03-13 17:40
*/
@Document(collection = "article_info")
@Data
public class Article { @Id
private String id; @Field("title")
private String title; @Field("v_count")
private Long visitCount; @Field("tags")
private List<String> tags; @Field("add_time")
private Date addTime; }
repository类
package com.tangzhe.repository; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.CrudRepository; import java.util.List; /**
* Created by 唐哲
* 2018-03-14 22:04
*/
public interface ArticleRepository extends CrudRepository<Article, String> { List<Article> findByTitle(String title); List<Article> findByTitleAndVisitCount(String title, Long visitCount); /** 分页查询 */
List<Article> findByTitle(String title, Pageable pageable); /** 排序 */
List<Article> findByTitle(String title, Sort sort); /** 查询头一条 */
List<Article> findTop1ByTitle(String title); /** 查询头二条 */
List<Article> findTop2ByTitle(String title); }
测试repository
package com.tangzhe.repository; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner; import java.util.Date;
import java.util.Iterator;
import java.util.List; /**
* Created by 唐哲
* 2018-03-14 22:07
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class ArticleRepositoryTest { @Autowired
private ArticleRepository articleRepository; //@Test
public void repositoryTest() {
System.out.println(articleRepository.count()); Iterator<Article> iterator = articleRepository.findAll().iterator();
while (iterator.hasNext()) {
Article article = iterator.next();
System.out.println(article);
}
} //@Test
public void testFindByTitle() {
List<Article> list = articleRepository.findByTitle("猿天地实战课程1");
System.out.println(list.size());
} //@Test
public void testSave() {
Article article = new Article();
article.setTitle("猿天地实战课程1");
article.setAddTime(new Date());
article.setVisitCount(100L);
article = articleRepository.save(article);
System.out.println(article);
} //@Test
public void testFindByTitleAndVisitCount() {
List<Article> list = articleRepository.findByTitleAndVisitCount("猿天地实战课程1", 10L);
System.out.println(list.size());
} //@Test
public void testPageable() {
List<Article> list = articleRepository.findByTitle("猿天地实战课程1", new PageRequest(0, 2));
System.out.println(list.size());
} //@Test
public void testSort() {
List<Article> list = articleRepository.findByTitle("猿天地实战课程1", new Sort(new Sort.Order(Sort.Direction.DESC, "visitCount")));
for(Article article : list) {
System.out.println(article.getVisitCount());
}
} //@Test
public void testFindTop1ByTitle() {
List<Article> list = articleRepository.findTop1ByTitle("猿天地实战课程1");
System.out.println(list.size());
} //@Test
public void testFindTop2ByTitle() {
List<Article> list = articleRepository.findTop2ByTitle("猿天地实战课程1");
System.out.println(list.size());
} }
MongoDB学习-->Spring Data Mongodb框架之Repository的更多相关文章
- MongoDB学习-->Spring Data Mongodb-->MongodbTemplate
配置文件application-dev.yml: server: port: 8888 mongo: host: localhost port: 27017 timeout: 60000 db: ma ...
- mongodb Decimal Spring data mongodb Decimal128 SpringMvc 序列化字符串 json converter
Mongodb 3.4 就开始支持Decimal 类型,解决double的精度问题,但是不太好用,MapReduce的时候Array.sum 也不能计算 Decimal.比较坑,但是聚合可以用 Spr ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- mongodb java spring data
关于如何集成spring-data-mongodb到项目中,已经有很多人介绍了,这里只给出几个链接. GETTING STARTED Accessing Data with MongoDB: http ...
- Spring Data MongoDB example with Spring MVC 3.2
Spring Data MongoDB example with Spring MVC 3.2 Here is another example web application built with S ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- Spring data mongodb 聚合,投射,内嵌数组文档分页.
尽量别直接用 DBObject ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Introduction to Spring Data MongoDB
Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...
随机推荐
- 开源项目android-uitableview介绍
在iOS应用中,UITableView应该是使用率最高的视图之一了.iPod.时钟.日历.备忘录.Mail.天气.照片.电话.短信. Safari.App Store.iTunes.Game Cent ...
- JAVA基础之基本类型包装类、System类、Math类、Arrays类及大数据运算
个人理解: 为了方便运算及调用一些方法,我们需要将基本类型的数值转换为对象:不过转换的时候需要特别注意好它们的类型到底是什么,需要调用方法的类名是哪个!特别注意是Byte常量池的相关问题(==):gc ...
- css3背景与边框相关样式
background-attachment 背景图像是否固定或者随着页面的其余部分滚动 background-color 设置元素的背景颜色 b ...
- Kendo MVVM 数据绑定(一) attr
Kendo MVVM 数据绑定(一) attr Kendo UI MVVM 数据绑定支持的绑定属性有 attr, checked, click, custom , disabled,enabled, ...
- echarts使用中的那些事儿( 三)
饼图上的那些字与下面说明性的文字有些重合,该怎么缩小圆形的大小呢,还有它的位置,怎么让它向上一些或者向下一些: 有以下两个属性可以解决问题: radius : '55%', ------------这 ...
- 【css】css2实现两列三列布局的方法
前言 对于 flex 弹性布局相信大家都有所了解,它是 css3 中的属性,然而它具有一定的兼容性问题.楼主前几天面试时遇到了面试官需要设计一个两列布局,我当然就说父元素 flex 吧哩吧啦,然而需要 ...
- wireshark使用教程及TCP三次握手实例
安装后,选择对应访问网络的网卡,即可看到下面的主界面 具体说下封包详细信息 (Packet Details Pane) 这个面板是我们最重要的,用来查看协议中的每一个字段. 各行信息分别为 Frame ...
- 使用代码获得Netweaver里某个software component和C4C的版本
有同事问如何通过代码的方式获得Netweaver里某个Software component的版本信息,以及Cloud for Customer(C4C)的版本信息. Netweaver 点了Detai ...
- php 基本连接mysql数据库和查询数据
连接数据库,有三种方法 1. 常规方式: $con=mysql_connect($dbhostip,$username,$userpassword) or die("Unable to co ...
- 2018.4.15 Mac系统下如何使用StartUml画好需求分析的类图 (同样适用于windows)
Mac如何使用StartUml (同样适用于windows) 左侧边栏的英文含义及其用法 关联(Association) [关联关系]:是一种拥有的关系,它使一个类知道另一个类的属性和方法:如:老师与 ...