mongonDB作为非关系型数据库
是非关系数据库当中功能最丰富,最像关系数据库的。因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,而且还支持对数据建立索引,分页查询、多条件查询和排序功能这都不是问题。
不光香,还能造!能够减轻数据库的压力,提高系统性能.
首先直接上依赖
org.springframework.boot
spring-boot-starter-data-mongodb
2.1.6.RELEASE
springBoot的yml配置
option是设置超时时间,跟,不喜欢这么多的 可以删掉,假如报错再贴上去吧哈哈
spring:
data:
mongodb:
uri: mongodb://账号:密码@服务器名称:27017
database: 集合名称(库名)
option:
min-connection-per-host: 20
max-connection-per-host: 200
threads-allowed-to-block-for-connection-multiplier: 5
server-selection-timeout: 30000
max-wait-time: 120000
max-connection-idle-time: 0
max-connection-life-time: 0
connect-timeout: 20000
socket-timeout: 0
socket-keep-alive: false
ssl-enabled: false
ssl-invalid-host-name-allowed: false
always-use-m-beans: false
heartbeat-socket-timeout: 20000
heartbeat-connect-timeout: 20000
min-heartbeat-frequency: 500
heartbeat-frequency: 10000
local-threshold: 15
是前辈留给我们的好产物,一定要放心使用。
创建接口继承我们的MongoRepository
public interface AutomationBWHWebRepository extends MongoRepository<实体类名,主键id> {
}
实体类 @Doucment(collection="")是映射到的表名 上边的是Lombok
@Data
@ToString
@Document(collection = "mongoDB表明")
public class AutomationBWHWeb {
//mongoDb上的主键
@Id
private String Id;
路铺好了 直接上内容代码了
package org.springframework.data.repository.query;
import java.util.Optional;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
public interface QueryByExampleExecutor {
Optional findOne(Example var1);
Iterable findAll(Example var1);
Iterable findAll(Example var1, Sort var2);
Page findAll(Example var1, Pageable var2);
long count(Example var1);
boolean exists(Example var1);
}
贴出MongoRepository的findAll()查询源码,随机选用一条 那就是它把
Page findAll(Example var1, Pageable var2)
Example是自行封装的查询条件 下边有介绍 ,而这个Pageable 我们再看看源码,需要的是什么参数。 贴得不是很全,建议大家在编译器中去好好看看。
算了 我挺难的,全部贴出来可能会脑瓜子嗡嗡的。
PageRequest是继承了AbstractPageRequest又实现了 Pageable所以!我们可以用这个对象
//静态构造方法 分页加时间排序的功能,Sort也就是我们根据字段排序的一个条件
public static PageRequest of(int page, int size, Sort sort) {
return new PageRequest(page, size, sort);
}
最后最后!!正题!
//参数参数条件
public QueryResult findHospitalH5(Map queryPageRequest) {
int page = Integer.parseInt(queryPageRequest.get("currentPage"));
int size = Integer.parseInt(queryPageRequest.get("pageSize"));
String hospitalName = queryPageRequest.get("hospitalName");
String remark = queryPageRequest.get("remark");
//创建查询条件对象
ExampleMatcher exampleMatcher = ExampleMatcher.matching().
//remark表示查询字段名称
withMatcher("remark", ExampleMatcher.GenericPropertyMatchers.contains()).
withMatcher("hospitalName",
//ExampleMatcher.GenericPropertyMatchers.contains()表示包含的意思还需要更多需求的,文章下方有其余方法,包括结尾是,全匹配等
ExampleMatcher.GenericPropertyMatchers.contains());
//创建实体类
AutomationBWHH5 information = new AutomationBWHH5();
//将所需要条件查询的值set到实体类中
if (!StringUtils.isEmpty(hospitalName)) {
information.setHospitalName(hospitalName);
}
if (!StringUtils.isEmpty(remark)) {
information.setRemark(remark);
}
//缝合条件
Example example = Example.of(information, exampleMatcher);
//设置分页,这里page页码是不允许为0的
if (page <= 0) {
page = 1;
}
if (size == 0) {
size = 10;
}
//???假如觉得麻烦,按照自己需求来 哈哈哈
page = page - 1;
//Sort.Direction.DESC 这里是按照集合表里边的sortDate字段进行正向排序,我的是在实体类中设置的字段为Date
Sort sort = new Sort(Sort.Direction.DESC,"sortDate");
//分页查询
Pageable pageable = new PageRequest(page, size,sort);
Page requestPage = automationBWHH5Repository.findAll(example, pageable);
QueryResult queryResult = new QueryResult();
queryResult.setTotal(requestPage.getTotalElements());
queryResult.setList(requestPage.getContent());
return queryResult;
}
ExampleMatcher.GenericPropertyMatchers.->
根据需要自行匹配。不恰当的地方,大佬批评指正!
觉得很香的小伙伴一定要告诉妈妈!