```xml
<dependency>
    <groupId>com.gitee.anwena</groupId>
    <artifactId>mongo-plus-solon-plugin</artifactId>
    <version>最新版本</version>
</dependency>
```

#### 1、描述

使用MyBatisPlus的方式，优雅的操作MongoDB，减少学习成本，提高开发效率，无需写MongoDB繁杂的操作指令

如果您正在使用这个项目并感觉良好，请Star支持我们，开源地址：

* gitee: https://gitee.com/anwena/mongo-plus
* github: https://github.com/anwena/MongoPlus
* 官网：https://www.mongoplus.cn

#### 2、优点

* 无侵入：只做增强不做改变，引入它不会对现有工程产生影响，如丝般顺滑
* 损耗小：启动即会自动注入基本 CURD，性能基本无损耗，直接面向对象操作
* 强大的 CRUD 操作：通用 Service，仅仅通过少量配置即可实现单表大部分 CRUD 操作，更有强* 大的条件构造器，满足各类使用需求
* 支持 Lambda 形式调用：通过 Lambda 表达式，方便的编写各类查询条件，无需再担心字段写错
* 支持主键自动生成：支持多达 4 种主键策略（内含分布式唯一 ID 生成器 - Sequence），可自由* 配置，完美解决主键问题
* 自动装配对solon的一些配置，开箱即用
* 提供MongoDB的声明式事务，使用更加便捷
* 支持无实体类情况下的操作

更多功能请查看官网：(https://www.mongoplus.cn)


#### 3、配置示例

配置分格有两种：1，将配置内容独立为一个文件；2，将配置做为主配置的内容（注意 "|" 符号）。具体的配置内容，参考官网内容(https://www.mongoplus.cn)。

```yaml
mongo-plus:
  data:
    mongodb:
      host: 127.0.0.1   #ip
      port: 27017   #端口
      database: test    #数据库名
      username: test    #用户名，没有可不填
      password: test    #密码，同上
      authenticationDatabase: admin     #验证数据库
      connectTimeoutMS: 50000   #在超时之前等待连接打开的最长时间（以毫秒为单位）
  log: true
```

#### 4、应用示例

提供两种方式，一种为继承IService和ServiceImpl，和直接注入MongoPlusMapMapper类，后者返回为Map格式

首先需要一个实体类

```java
@Data
public class User {
    @ID     //使用ID注解，标注此字段为MongoDB的_id，或者继承BaseModelID类，可指定自动生成代码类型
    private String id;
    private String name;
    private Long age;
    private String email;
}
```

其次需要一个Service接口和实现类

###### ps: 使用一个类继承ServiceImpl也可以

```java
public interface MongoService extends IService<User> {
        
}

public class MongoServiceImpl extends ServiceImpl<User> implements MongoService {
    
}
```

至此，已经可以对MongoDB进行快速的增删改查操作了

```java
@Controller
public class UserController {

    /**
     * 使用普通继承的方式
     */
    @Inject
    private UserService userService;

    /**
     * 使用注入MongoPlusMapMapper的方式
     */
    @Inject
    private MongoPlusMapMapper mongoPlusMapMapper;

    @Get
    @Mapping("/findAllUser")
    public List<User> findAllUser(){
        List<Map<String, Object>> mapList = mongoPlusMapMapper.list("user");
        mapList.forEach(System.out::print);
        List<User> userList = userService.lambdaQuery().list();
        userList.forEach(System.out::print);
        return userList;
    }

    @Get
    @Mapping("/addUser")
    public Boolean addUser(){
        Boolean save = mongoPlusMapMapper.save("user", 
            new HashMap<String,Object>(){{
            	put("userName","我要测试我要测试");
	            put("userStatus",1);
    	        put("age",21);
        	    put("role",new HashMap<String,Object>(){{
            	    put("roleName","普通用户");
                	put("roleIntroduce","没啥权限");
	            }});
        	}});
        System.out.println(save ? "添加成功" : "添加失败");
        return save;
    }
}
```

