MongoDB学习-->Spring Data Mongodb-->MongodbTemplate
配置文件application-dev.yml:
server:
port: 8888
mongo:
host: localhost
port: 27017
timeout: 60000
db: mamabike
配置类MongoDBConfiguration:
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.mongodb; import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* Created by 唐哲
* 2018-03-13 17:25
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseTest {
}
实体类:
package com.tangzhe.mongodb; 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; }
测试mongodbTemplate:
package com.tangzhe.mongodb.mongotemplate; import com.tangzhe.mongodb.Article;
import com.tangzhe.mongodb.BaseTest;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List; /**
* Created by 唐哲
* 2018-03-13 17:27
*/
public class MongoTemplateTest extends BaseTest { @Autowired
private MongoTemplate mongoTemplate; /**
* 查询某数据库中所有集合(表)
*/
//@Test
public void findAllCollections() {
mongoTemplate.getCollectionNames().forEach(System.out::println);
} /**
* 批量插入数据
*/
//@Test
public void insertBatch() {
List<Article> datas = new ArrayList<>();
for(int i=0; i<10; i++) {
Article article = new Article();
article.setTitle("猿天地实战课程" + i);
article.setVisitCount(10L);
article.setTags(Arrays.asList("java", "python", "c#"));
article.setAddTime(new Date());
datas.add(article);
} mongoTemplate.insert(datas, Article.class);
} /**
* 修改数据
*/
@Test
public void update() {
//根据title修改
// mongoTemplate.updateFirst(
// Query.query(
// new Criteria("title").is("猿天地实战课程0")
// ),
// Update.update("visitCount", 100L),
// Article.class
// ); //存在就修改不存在就插入
// mongoTemplate.upsert(
// Query.query(
// new Criteria("title").is("猿天地实战课程10")
// ),
// Update.update("visitCount", 200L),
// Article.class
// ); //修改title,并将visitCount加1
// mongoTemplate.updateFirst(
// Query.query(
// new Criteria("title").is("猿天地实战课程0")
// ),
// Update.update("title", "猿天地实战课程").inc("visitCount", 1),
// Article.class
// ); //如果传入的是集合名称,则需要写苦衷原始的key名称,如果是实体类就写类中的字段名称
// mongoTemplate.updateFirst(
// Query.query(
// new Criteria("title").is("猿天地实战课程")
// ),
// Update.update("v_count", 1L),
// "article_info"
// ); //删除key
mongoTemplate.updateFirst(
Query.query(
new Criteria("title").is("猿天地实战课程")
),
new Update().unset("visitCount"),
Article.class
);
} /**
* 删除数据
*/
@Test
public void delete() {
// mongoTemplate.remove(
// Query.query(
// Criteria.where("title").is("猿天地实战课程")
// ),
// Article.class
// ); //删除一条,并且返回这条数据
Article article = mongoTemplate.findAndRemove(
Query.query(
Criteria.where("title").is("猿天地实战课程10")
),
Article.class
);
System.out.println(article); //批量删除,并且返回数据列表
List<Article> articles = mongoTemplate.findAllAndRemove(
Query.query(
Criteria.where("title").is("猿天地实战课程10")
),
Article.class
); //删除集合(表)的两种方式
mongoTemplate.dropCollection(Article.class);
mongoTemplate.dropCollection("article_info"); //删除数据库
mongoTemplate.getDb().dropDatabase();
} /**
* 查询数据
*/
@Test
public void select() {
//数量查询
long count = mongoTemplate.count(
Query.query(
Criteria.where("visitCount").is(10)
),
Article.class
);
System.out.println(count); //查询第一条
Article article = mongoTemplate.findOne(
Query.query(
Criteria.where("visitCount").is(10)
),
Article.class
);
System.out.println(article); //查询所有
List<Article> articles = mongoTemplate.findAll(Article.class);
System.out.println(articles.size()); //带条件查询
mongoTemplate.find(
Query.query(
Criteria.where("visitCount").is(100)
),
Article.class
); //如果在大数据量的情况下,最好是排序,记住你上次最后一条数据的ID,
//然后就是大于上次的ID,然后limit页数
articles = mongoTemplate.find(
Query.query(
Criteria.where("visitCount").is(100)
).skip(0).limit(10),
Article.class
);
System.out.println(articles.size()); //根据ID查询
mongoTemplate.findById(new ObjectId("5aa79ddecdb51518c073a247"), Article.class); //in查询
articles = mongoTemplate.find(
Query.query(
Criteria.where("visitCount").in(100, 200, 300)
),
Article.class
);
System.out.println(articles.size()); //or查询
articles = mongoTemplate.find(
Query.query(
new Criteria().orOperator(
Criteria.where("visitCount").is(100),
Criteria.where("visitCount").is(200),
Criteria.where("visitCount").is(300)
)
),
Article.class
);
System.out.println(articles.size());
} }
MongoDB学习-->Spring Data Mongodb-->MongodbTemplate的更多相关文章
- MongoDB学习-->Spring Data Mongodb框架之Repository
application-dev.yml server: port: 8888 mongo: host: localhost port: 27017 timeout: 60000 db: mamabik ...
- mongodb Decimal Spring data mongodb Decimal128 SpringMvc 序列化字符串 json converter
Mongodb 3.4 就开始支持Decimal 类型,解决double的精度问题,但是不太好用,MapReduce的时候Array.sum 也不能计算 Decimal.比较坑,但是聚合可以用 Spr ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- Spring Data MongoDB 四:基本文档改动(update)(一)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data Mo ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- spring data mongodb 配置遇到的几个问题
一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...
- mongodb java spring data
关于如何集成spring-data-mongodb到项目中,已经有很多人介绍了,这里只给出几个链接. GETTING STARTED Accessing Data with MongoDB: http ...
- spring data mongodb中,如果对象中的属性不想加入到数据库字段中
spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...
随机推荐
- 编译安装php容易出现的问题以及解决办法
http://crybit.com/20-common-php-compilation-errors-and-fix-unix/
- ListView的圆角的简单实现
今天在用ListView控件的时候,发现自带的不美观,就是找找相关的美化教程,发现都挺麻烦的,无意中发现一个开源项目,地址:点击打开链接,使用起来很简单,官方网站说的也很简单,就是导入库,然后像其他控 ...
- Java并发(二):基础概念
并发编程的第二部分,先来谈谈发布(Publish)与逸出(Escape); 发布是指:对象能够在当前作用域之外的代码中使用,例如:将对象的引用传递到其他类的方法中,对象的引用保存在其他类可以访问的地方 ...
- Spring 整合 Quartz 实现动态定时任务(附demo)
最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先 ...
- kmem_alloc
http://www.lehman.cuny.edu/cgi-bin/man-cgi?kmem_alloc+9
- 实现memcopy函数
实现memcopy函数: void * memcpy(void *dest, const void *src, unsigned int count); { if ((src == NULL) || ...
- 编写sql查询语句思路
编写查询语句思路/* 1.首先确定最终输出结果的列,包括几个方面:A.首先这些列来自于一个 表.还是多个表,如果是多个表则可能用到多表查询的(等值连接.不等值 连接.外连接.自连接):B.这些列是直接 ...
- web端 第一天认识基础
.NET 分为两大类 一.客户端应用程序 C/S 技术: Winform WPF MFC MVVM 二.外部端应用程序 B/S(网页端应用程序/WEB端/WEB端应用程序) 目前学的技术是A ...
- 101个MySQL的调节和优化技巧
MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...
- UVA 12325 Zombie'sTreasureChest 宝箱 (分类枚举)
看上去非常像背包的问题,但是体积太大了. 线性规划的知识,枚举附近点就行了,优先选性价比高的, 宝物有两种体积为S0,价值V0,体积S1,价值V1. 枚举分以下几种: 1:枚举拿宝物1的数量,然后尽量 ...