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 ...
随机推荐
- webpack.config.js====output出口文件的配置
output: { filename: './js/[name].[hash:8].js', /* * filename:在使用webpack-dev-server模式时,如果要使用hash,是不可以 ...
- Java中的构造函数——通过示例学习Java编程(14)
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=25 构造函数是用来初始化新创建的对象的代码块. ...
- Servlet中文件上传的几种方式
上传文件,因为上传的都是二进制数据,所以在Servlet中就不能直接用request.getParameter();方法进行数据的获取,需要借助第三方jar包对上传的二进制文件进行解析.常用的方式如下 ...
- AdonisJs(Node框架)学习总结
先列出作为前端开发人员必须知道的10个NodeJs框架 AdonisJs 一个服务端渲染的MVC框架,它是 Laravel (PHP框架)的一个 NodeJS 版本. 可以安装脚手架工具adonis ...
- windows server 2008 r2 启用 Windows Defender
单击“开始”,指向“管理工具”,然后单击“服务器管理器”. 在“服务器管理器”中,单击“功能”,然后在“服务器管理器”细节窗格中的“功能摘要”下,单击“添加功能”. 此时会启动“添加功能向导”. 在“ ...
- 检查windows端口被占用
开始---->运行---->cmd,或者是window+R组合键,调出命令窗口 输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是49157,首先 ...
- 如何将S/4HANA系统存储的图片文件用Java程序保存到本地
我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api. DATA ls_appl ...
- Android(java)学习笔记111:Java异常分类
Java异常可分为3种: (1)编译时异常:Java.lang.Exception (2)运行期异常:Java.lang.RuntimeException (3)错误:Java.lang.Error
- Android(java)学习笔记121:BroadcastReceiver之 自定义广播
广播使用: 电台:对外发送信号.---------电台发送广播(可以自定义) 收音机:接收电台的信号.-----广播接收者 这里,我们就说明自定 ...
- 【转】iOS学习笔记(十五)——数据库操作(SQLite)
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...