mongoDB -- springboot 连接配置 及 mongoTemplate 基本使用
<h2 id="1配置">1、配置</h2><h3 id="11pomxml">1.1、pom.xml</h3>
<pre><code> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</code></pre>
<h3 id="12-applicationyml-配置">1.2、 application.yml 配置</h3>
<pre><code>spring:
data:
mongodb:
host: 192.168.20.101
port: 27017
database: test
username: accountUser
password: 123456
</code></pre>
<p>以上配置会报错:org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{.......</p>
<p>改为以下方式:</p>
<pre><code>spring:
data:
mongodb:
uri: mongodb://accountUser:123456@192.168.20.101:27017/test?authSource=admin # 开启了用户验证
# uri: mongodb://192.168.20.101:27017/test
</code></pre>
<p>注意:uri 中的用户必须是该数据库自己的用户, 如果使用 admin 数据库的超级用户也会报用户验证的错误。<br>
一开始使用的用户是 admin 数据库的用户,给的权限是 readWriteAnyDatabase ,插入数据时出现 用户验证的错误。</p>
<p>uri 格式: mongodb://host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[?options]]<br>
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库<br>
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。<br>
portX 可选的指定端口,如果不填,默认为27017<br>
/database 如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。<br>
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开</p>
<p>authSource 是 options中的一个,表示 用户名在那个数据库上创建的,需在在该数据库验证。如果指定了实际连接的数据库,且没有设置 authSource,则authSource是实际连接的库。如果都没设置,则authSource是admin</p>
<p>连接方式:https://www.cnblogs.com/zhanglw456/p/14607392.html</p>
<h2 id="2mongotemplate-基本使用">2、mongoTemplate 基本使用</h2>
<h3 id="21-常用方法">2.1 常用方法</h3>
<pre><code>mongoTemplate.findAll(Student.class): 查询Student文档的全部数据
mongoTemplate.findById(<id>, Student.class): 查询Student文档id为id的数据
mongoTemplate.find(query, Student.class);: 根据query内的查询条件查询
updateFirst(Query query, UpdateDefinition update, Class<?> entityClass) 更新匹配到的第一条
updateMulti(Query query, UpdateDefinition update, Class<?> entityClass) 更新多条
mongoTemplate.upsert(query, update, Student.class): 有就更新,无则新增
mongoTemplate.remove(student): 根据id删除
mongoTemplate.remove(query, Student.class): 删除
mongoTemplate.insert(student): 新增
</code></pre>
<h3 id="22-query对象">2.2 Query对象</h3>
<blockquote>
<p>1 创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)<br>
2 精准条件:criteria.and(“key”).is(“条件”)<br>
模糊条件:criteria.and(“key”).regex(“条件”)<br>
3、封装条件:query.addCriteria(criteria)<br>
4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)<br>
小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)<br>
5、Query.addCriteria(new Criteria().andOperator(gt,lt));<br>
6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。<br>
7、排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))</p>
</blockquote>
<h3 id="23-代码示例">2.3 代码示例:</h3>
<pre><code>
// 分页 使用 Pageable 查询
// 也可 直接使用query.skip(offset).limit(count) 查询
Pageable pageable = PageRequest.of(page, count);// page 表示第几页,从 0 开始, count表示每页条数
Query query = new Query();
//动态拼接查询条件
if(StringUtils.isNotBlank(typeCtg)){
query.addCriteria(Criteria.where("type_ctg").is(typeCtg));
}
if(StringUtils.isNotBlank(type)){
query.addCriteria(Criteria.where("type").is(type));
}
if(StringUtils.isNotBlank(company)){
query.addCriteria(Criteria.where("company").is(company));
}
//获取总条数
long count1 = mongoTemplate.count(query,AssetIdentifier.class);
List<AssetIdentifier> identifierList = mongoTemplate.find(query.with(pageable), AssetIdentifier.class);// 执行查询
</code></pre>
<pre><code> public void mongoTemplateSample(FormDataApproval formDataApproval) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(formDataApproval.getId()).and("tenant_id").is(formDataApproval.getTenantId()));
Update update = new Update();
update.set("process_id", formDataApproval.getProcessId());
List<FormDataApproval> list = new ArrayList<>();
list.add(formDataApproval);
/**
* 数据库有,就新增, 没有,就修改
*/
mongoTemplate.upsert(query, update, FormData.class, "formData");
/**
* 修改方法
*/
// 无实际意义,不推荐使用
mongoTemplate.update(FormDataApproval.class);
mongoTemplate.updateFirst(query, update, FormDataApproval.class, "formDataApproval");
mongoTemplate.updateMulti(query, update, FormDataApproval.class, "formDataApproval");
mongoTemplate.findAndModify(query, update, FormDataApproval.class, "formDataApproval");
/**
* 查询方法
*/
mongoTemplate.find(query, FormDataApproval.class, "formDataApproval");
mongoTemplate.findOne(query, FormDataApproval.class, "formDataApproval");
mongoTemplate.findAll(FormDataApproval.class, "formDataApproval");
mongoTemplate.findById(formDataApproval.getId(), FormDataApproval.class, "formDataApproval");
/**
* 删除方法
*/
mongoTemplate.remove(query, FormDataApproval.class, "formDataApproval");
mongoTemplate.findAndRemove(query, FormDataApproval.class, "formDataApproval");
mongoTemplate.findAllAndRemove(query, FormDataApproval.class, "formDataApproval");
/**
* 新增方法
*/
mongoTemplate.save(formDataApproval, "formDataApproval"); // 同upsert(),没有新增,有修改
mongoTemplate.insert(formDataApproval, "formDataApproval");
mongoTemplate.insertAll(list);
}
</code></pre>
<p>参考:<br>
https://www.jianshu.com/p/a576499769ae<br>
https://blog.csdn.net/qq_37707251/article/details/85172545<br>
https://blog.csdn.net/leinminna/article/details/101277443</p>
<p>官网api:<br>
https://docs.spring.io/spring-data/data-mongo/docs/3.1.7/api/<br>
https://docs.spring.io/spring-data/data-mongo/docs/3.1.7/api/org/springframework/data/mongodb/core/MongoTemplate.html</p><br><br>
来源:https://www.cnblogs.com/zhanglw456/p/14659228.html
頁:
[1]