依赖

  <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-mongodb</artifactId>   </dependency>

代码

SimpleMongoService

package com.baba.security.auth2.service;import com.baba.security.auth2.entity.RangeEntity;import java.util.List;import java.util.Map;/** * @Author wulongbo * @Date 2022/1/19 15:28 * @Version 1.0 */public interface SimpleMongoService<T> {    void createCollection(String name);    String createIndex(String collectionName, String filedName);    List<String> getAllIndexes(String collectionName);    void insert(T info, String collectionName);    void insertMulti(List<T> infos, String collectionName);    void updateById(String id, String collectionName, T info);    void deleteById(String id, Class<T> clazz, String collectionName);    T selectById(String id, Class<T> clazz, String collectionName);    List<T> selectList(String collectName, Class<T> clazz);    List<T> selectList(String collectName, Class<T> clazz, Integer currentPage, Integer pageSize);    List<T> selectByCondition(String collectName, Map<String, Object> conditions, Class<T> clazz, Integer currentPage, Integer pageSize);    List<T> selectByCondition(String collectName, Map<String, RangeEntity> range, Map<String, String> conditions, Class<T> clazz, Integer currentPage, Integer pageSize);}

SimpleMongoServiceImpl

package com.baba.security.auth2.service.impl.mongo;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.baba.security.auth2.entity.MongoBaseInfo;import com.baba.security.auth2.entity.RangeEntity;import com.baba.security.auth2.service.SimpleMongoService;import com.mongodb.client.ListIndexesIterable;import com.mongodb.client.model.IndexOptions;import com.mongodb.client.model.Indexes;import org.bson.Document;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 org.springframework.stereotype.Service;import org.springframework.util.ObjectUtils;import java.util.ArrayList;import java.util.List;import java.util.Map;/** * @Author wulongbo * @Date 2022/1/19 15:20 * @Version 1.0 * 简略的mongodb应用接口 */@Servicepublic class SimpleMongoServiceImpl<T extends MongoBaseInfo> implements SimpleMongoService<T> {    /**     * 注入template,缩小反复代码     */    @Autowired    private MongoTemplate mongoTemplate;    /**     * 性能形容: 创立一个汇合     * 同一个汇合中能够存入多个不同类型的对象,咱们为了不便保护和晋升性能,     * 后续将限度一个汇合中存入的对象类型,即一个汇合只能寄存一个类型的数据     *     * @param name 汇合名称,相当于传统数据库的表名     * @return:void     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 17:27     */    @Override    public void createCollection(String name) {        mongoTemplate.createCollection(name);    }    /**     * 性能形容: 创立索引     * 索引是顺序排列,且惟一的索引     *     * @param collectionName 汇合名称,相当于关系型数据库中的表名     * @param filedName      对象中的某个属性名     * @return:java.lang.String     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 16:13     */    @Override    public String createIndex(String collectionName, String filedName) {        //配置索引选项        IndexOptions options = new IndexOptions();        // 设置为惟一        options.unique(true);        //创立按filedName升序排的索引        return mongoTemplate.getCollection(collectionName).createIndex(Indexes.ascending(filedName), options);    }    /**     * 性能形容: 获取以后汇合对应的所有索引的名称     *     * @param collectionName     * @return:java.util.List<java.lang.String>     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 16:46     */    @Override    public List<String> getAllIndexes(String collectionName) {        ListIndexesIterable<Document> list = mongoTemplate.getCollection(collectionName).listIndexes();        //下面的list不能间接获取size,因而初始化arrayList就不设置初始化大小了        List<String> indexes = new ArrayList<>();        for (Document document : list) {            document.entrySet().forEach((key) -> {                //提取出索引的名称                if (key.getKey().equals("name")) {                    indexes.add(key.getValue().toString());                }            });        }        return indexes;    }    /**     * 性能形容: 往对应的汇合中插入一条数据     *     * @param info           存储对象     * @param collectionName 汇合名称     * @return:void     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 16:46     */    @Override    public void insert(T info, String collectionName) {        mongoTemplate.insert(info, collectionName);    }    /**     * 性能形容: 往对应的汇合中批量插入数据,留神批量的数据中不要蕴含反复的id     *     * @param infos 对象列表     * @return:void     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 16:47     */    @Override    public void insertMulti(List<T> infos, String collectionName) {        mongoTemplate.insert(infos, collectionName);    }    /**     * 性能形容: 应用索引信息准确更改某条数据     *     * @param id             惟一键     * @param collectionName 汇合名称     * @param info           待更新的内容     * @return:void     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 18:42     */    @Override    public void updateById(String id, String collectionName, T info) {        Query query = new Query(Criteria.where("id").is(id));        Update update = new Update();        String str = JSON.toJSONString(info);        JSONObject jQuery = JSON.parseObject(str);        jQuery.forEach((key, value) -> {            //因为id相当于传统数据库中的主键,这里应用时就不反对更新,所以须要剔除掉            if (!key.equals("id")) {                update.set(key, value);            }        });        mongoTemplate.updateMulti(query, update, info.getClass(), collectionName);    }    /**     * 性能形容: 依据id删除汇合中的内容     *     * @param id             序列id     * @param collectionName 汇合名称     * @param clazz          汇合中对象的类型     * @return:void     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 16:47     */    @Override    public void deleteById(String id, Class<T> clazz, String collectionName) {        // 设置查问条件,当id=#{id}        Query query = new Query(Criteria.where("id").is(id));        // mongodb在删除对象的时候会判断对象类型,如果你不传入对象类型,只传入了汇合名称,它是找不到的        // 下面咱们为了方便管理和晋升后续解决的性能,将一个汇合限度了一个对象类型,所以须要自行治理一下对象类型        // 在接口传入时须要同时传入对象类型        mongoTemplate.remove(query, clazz, collectionName);    }    /**     * 性能形容: 依据id查问信息     *     * @param id             注解     * @param clazz          类型     * @param collectionName 汇合名称     * @return:java.util.List<T>     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/20 16:47     */    @Override    public T selectById(String id, Class<T> clazz, String collectionName) {        // 查问对象的时候,不仅须要传入id这个惟一键,还须要传入对象的类型,以及汇合的名称        return mongoTemplate.findById(id, clazz, collectionName);    }    /**     * 性能形容: 查问列表信息     * 将汇合中合乎对象类型的数据全副查问进去     *     * @param collectName 汇合名称     * @param clazz       类型     * @return:java.util.List<T>     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/21 10:38     */    @Override    public List<T> selectList(String collectName, Class<T> clazz) {        return selectList(collectName, clazz, null, null);    }    /**     * 性能形容: 分页查问列表信息     *     * @param collectName 汇合名称     * @param clazz       对象类型     * @param currentPage 以后页码     * @param pageSize    分页大小     * @return:java.util.List<T>     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/21 10:38     */    @Override    public List<T> selectList(String collectName, Class<T> clazz, Integer currentPage, Integer pageSize) {        //设置分页参数        Query query = new Query();        //设置分页信息        if (!ObjectUtils.isEmpty(currentPage) && ObjectUtils.isEmpty(pageSize)) {            query.limit(pageSize);            query.skip(pageSize * (currentPage - 1));        }        return mongoTemplate.find(query, clazz, collectName);    }    /**     * 性能形容: 依据条件查问汇合     *     * @param collectName 汇合名称     * @param conditions  查问条件,目前查问条件解决的比较简单,仅仅做了相等匹配,没有做含糊查问等简单匹配     * @param clazz       对象类型     * @param currentPage 以后页码     * @param pageSize    分页大小     * @return:java.util.List<T>     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/21 10:48     */    @Override    public List<T> selectByCondition(String collectName, Map<String, Object> conditions, Class<T> clazz, Integer currentPage, Integer pageSize) {        if (ObjectUtils.isEmpty(conditions)) {            return selectList(collectName, clazz, currentPage, pageSize);        } else {            //设置分页参数            Query query = new Query();            query.limit(pageSize);            query.skip(currentPage);            // 往query中注入查问条件            conditions.forEach((key, value) -> query.addCriteria(Criteria.where(key).is(value)));            return mongoTemplate.find(query, clazz, collectName);        }    }    /**     * 性能形容: 依据条件范畴查问汇合     *     * @param collectName 汇合名称     * @param conditions  查问条件     * @param clazz       对象类型     * @param currentPage 以后页码     * @param pageSize    分页大小     * @return:java.util.List<T>     * @since: v1.0     * @Author:wangcanfeng     * @Date: 2019/3/21 10:48     */    @Override    public List<T> selectByCondition(String collectName, Map<String, RangeEntity> range, Map<String, String> conditions, Class<T> clazz, Integer currentPage, Integer pageSize) {        if (ObjectUtils.isEmpty(conditions) && ObjectUtils.isEmpty(range)) {            return selectList(collectName, clazz, currentPage, pageSize);        }        //设置分页参数        Query query = new Query();        query.limit(pageSize);        query.skip(currentPage);        // 往query中注入查问条件        if (!ObjectUtils.isEmpty(conditions)) {            conditions.forEach((key, value) -> query.addCriteria(Criteria.where(key).is(value)));        }        if (!ObjectUtils.isEmpty(range)) {            range.forEach((key, value) -> query.addCriteria(Criteria.where(key).gte(value.getGte()).lte(value.getLt())));        }        return mongoTemplate.find(query, clazz, collectName);    }}

MongoBaseInfo

package com.baba.security.auth2.entity;import lombok.Getter;import lombok.Setter;import lombok.ToString;/** * @Author wulongbo * @Date 2022/1/19 15:27 * @Version 1.0 */@Getter@Setter@ToStringpublic class MongoBaseInfo {    private String id;}

测试类

import com.baba.security.auth2.Application;import com.baba.security.auth2.entity.*;import com.baba.security.auth2.service.SimpleMongoService;import com.baba.security.auth2.service.SourceService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.context.annotation.Profile;import java.util.*;    @SpringBootTest(classes = Application.class)@Profile(value = "dev")@RunWith(SpringRunner.class)public class ApiTest {@Autowired    private SimpleMongoService simpleMongoService;    /**     * 创立汇合     *     * @throws Exception     */    @Test    public void createCollection() {        simpleMongoService.createCollection("wulongbo");    }    /**     * 往对应的汇合中插入一条数据     *     * @throws Exception     */    @Test    public void insert() {        RoleTest role = new RoleTest();        role.setRoleName("角色名称");        role.setCreateTime(System.currentTimeMillis());        role.setUpdateTime(System.currentTimeMillis());        role.setUserId(1L);        role.setRoleDesc("角色形容");        simpleMongoService.insert(role, "wulongbo");    }    /**     * 往对应的汇合中批量插入一条数据     *     * @throws Exception     */    @Test    public void batchInsert() {        List<RoleTest> list = new ArrayList<>();        for (int i = 0; i < 10; i++) {            RoleTest role = new RoleTest();            role.setRoleName("角色名称" + 7);            role.setCreateTime(System.currentTimeMillis() + i);            role.setUpdateTime(System.currentTimeMillis() + i);            role.setUserId(1L + i);            role.setRoleDesc("角色形容" + 7);            list.add(role);        }        simpleMongoService.insertMulti(list, "wulongbo");    }    /**     * 依据id删除汇合中的内容     *     * @throws Exception     */    @Test    public void deleteById() {        simpleMongoService.deleteById("61e8b1e36fad7769c0015fff", RoleTest.class, "wulongbo");    }    /**     * 依据id查问信息     *     * @throws Exception     */    @Test    public void selectById() {        RoleTest roleTest = (RoleTest) simpleMongoService.selectById("61e8b1e36fad7769c0015ffd", RoleTest.class, "wulongbo");        System.out.println(roleTest.toString());    }    /**     * 查问列表信息     *     * @throws Exception     */    @Test    public void selectList() {        List<RoleTest> roleTest = simpleMongoService.selectList("wulongbo", RoleTest.class);        System.out.println(roleTest.toString());    }    /**     * 分页查问列表信息     *     * @throws Exception     */    @Test    public void selectList1() {        List<RoleTest> roleTest = simpleMongoService.selectList("wulongbo", RoleTest.class, 1, 10);        System.out.println(roleTest.toString());    }    /**     * 依据条件查问汇合     *     * @throws Exception     */    @Test    public void selectByCondition() {        Map<String, Object> map = new HashMap();        map.put("createTime", 1642642710124L);        map.put("roleDesc", "角色形容7");        List<RoleTest> roleTest = simpleMongoService.selectByCondition("wulongbo", map, RoleTest.class, 1, 10);        System.out.println(roleTest.toString());    }    /**     * 依据范畴条件查问汇合     *     * @throws Exception     */    @Test    public void selectByCondition1() {        Map<String, Object> map1 = new HashMap();        map1.put("roleDesc", "角色形容7");        Map<String, RangeEntity> map = new HashMap();        RangeEntity r = new RangeEntity();        r.setLt(1642642710130L);        r.setGte(1642648687019L);        map.put("createTime",r);        List<RoleTest> roleTest = simpleMongoService.selectByCondition("wulongbo", null,map1, RoleTest.class, 1, 10);        System.out.println(roleTest.toString());    }}

RangeEntity

package com.baba.security.auth2.entity;import lombok.Getter;import lombok.Setter;import lombok.ToString;/** * @Author wulongbo * @Date 2022/1/20 10:07 * @Version 1.0 */@Getter@Setter@ToStringpublic class RangeEntity {    private Object lt;    private Object gte;}