# fluent-mongo
**Repository Path**: quxy/fluent-mongo
## Basic Information
- **Project Name**: fluent-mongo
- **Description**: fluent-mongo是MongoTemplate增强工具包,简化查询操作,对条件查询、排序、分页进行了很好的封装。
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/xiezengcheng/fluent-mongo
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2023-02-15
- **Last Updated**: 2023-02-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# fluent-mongo
#### 介绍
fluent-mongo是MongoTemplate增强工具包,简化查询操作,对条件查询、排序、分页进行了很好的封装。
如果使用原生的Criteria构建查询条件,将会存在大量的魔法值。
例如: Criteria.where("m_dev_id").is(devModelId),其中 m_dev_id 就是魔法值。
fluent-mongo可以有效的避免魔法值的出现。
fluent-mongo利用Java8的@FunctionInterface,通过反射获取实体类的属性名称或者@Field注解的Value值
优先级:@Field > 实体类属性名称
#### 安装步骤
###### 1. 新建SpringBoot工程,在pom.xml在加入依赖
```
com.gitee.xiezengcheng
fluent-mongo
1.1.1
```
###### 2. 新建FluentMongoConfig配置类
```
@Configuration
public class FluentMongoConfig {
@Bean
public FluentMongoTemplate fluentMongoTemplate(MongoTemplate mongoTemplate) {
return new FluentMongoTemplate(mongoTemplate);
}
}
```
###### 3. 在application.yml中配置mongodb连接信息
```
# application.yml
spring:
data:
mongodb:
uri: mongodb://localhost:27017/test
```
###### 4. 新建实体类
```
@Document(collection = "tb_config")
public class DbConfig {
@Id
private Integer id;
@Field("host")
private String host;
@Field("port")
private Integer port;
@Field("path")
private String path;
@Field("dbVersion")
private Integer dbVersion;
......
}
```
#### 快速上手
###### 1. 查询全部
```
// 注入依赖
@Autowired
private FluentMongoTemplate fluentMongoTemplate;
List configList = fluentMongoTemplate.findAll(DbConfig.class, Sort.unsorted());
```
###### 2. 条件查询
```
// select * from tb_config where id = 1
CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().is(DbConfig::getId, 1);
Optional dbConfig = fluentMongoTemplate.findOneByQuery(criteriaAndWrapper, Sort.unsorted(), DbConfig.class);
// select * from tb_config where host is not null
CriteriaAndWrapper wrapper = new CriteriaAndWrapper().isNotNull(DbConfig::getHost);
List configList = fluentMongoTemplate.findListByQuery(wrapper, Sort.unsorted(), DbConfig.class);
// select * from tb_config where host = '127.0.0.1'
CriteriaAndWrapper wrapper = new CriteriaAndWrapper().is(DbConfig::getHost,"127.0.0.1");
List configList = fluentMongoTemplate.findListByQuery(wrapper, Sort.unsorted(), DbConfig.class);
// select * from tb_config where id = 1
fluentMongoTemplate.findById(1, DbConfig.class);
```
###### 3. 分页查询
```
// select * from tb_config where host = "127.0.0.1" limit 0,10
CriteriaAndWrapper wrapper = new CriteriaAndWrapper().is(DbConfig::getHost,"127.0.0.1");
FluentPageRequest pageRequest = FluentPageRequest.of(1, 10);
FluentPageResponse page = fluentMongoTemplate.findPage(DbConfig.class, wrapper, pageRequest);
```
###### 4. 排序
```
// select * from tb_config where host = "127.0.0.1" order by host desc
CriteriaAndWrapper wrapper = new CriteriaAndWrapper().is(DbConfig::getHost, "127.0.0.1");
Sort sort = new SortBuilder().add(DbConfig::getPort, Sort.Direction.DESC).build();
List configList = fluentMongoTemplate.findListByQuery(wrapper, sort, DbConfig.class);
```
###### 5. 获取原生MongoTemplate
```
MongoTemplate mongoTemplate = fluentMongoTemplate.mongoTemplate();
```
###### 6. 构建自己的查询
```
MongoTemplate mongoTemplate = fluentMongoTemplate.mongoTemplate();
// 构建查询条件
Query query = new CriteriaAndWrapper().is(DbConfig::getPort, 8080).buildQuery();
mongoTemplate.find(query, DbConfig.class);
```
###### 7. 复杂查询
```
// select * from tb_config where port = 8080 and (dbVersion = 1 or version = 2) order by dbVersion desc limit 0,10
Sort sort = new SortBuilder().add(DbConfig::getDbVersion, Sort.Direction.DESC).build();
FluentPageRequest pageRequest = FluentPageRequest.of(1, 10, sort);
CriteriaAndWrapper wrapper = new CriteriaAndWrapper()
.is(DbConfig::getPort, 8080)
.and(new CriteriaOrWrapper().is(DbConfig::getDbVersion, 1).or(new CriteriaOrWrapper().is(DbConfig::getDbVersion, 2)));
FluentPageResponse page = fluentMongoTemplate.findPage(DbConfig.class, wrapper, pageRequest);
```