Springboot 整合mongodb

60 阅读8分钟

直接上代码!

pom.xml

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

MongoMethod

package org.jeecg.modules.mongodbRelease.constant;

public class MongoMethod {

    public static final String INSERT = "INSERT";
    public static final String DELETE = "DELETE";
    public static final String UPDATE = "UPDATE";
    public static final String SELECT = "SELECT";
    public static final String PAGE = "PAGE";
    public static final String MONGOPage = "MONGOPage";
    public static final String fuzzyPage = "fuzzyPage";
    public static final String OMS_LOG = "oms_log";
}

FuzzyPage

package org.jeecg.modules.mongodbRelease.page;

import lombok.Data;

@Data
public class FuzzyPage {

    //模糊查询时输入的字符串
    public String InputStr;

    //每页记录数
    public Integer pageSize;

    //页数
    public Integer pageNum;
}

MongoPage

package org.jeecg.modules.mongodbRelease.page;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MongoPage<T> extends MyPage{
    private long total;//总记录数
    private List<T> list;//分页结果
    public MongoPage(Integer pageNum, Integer pageSize){
        this.pageNum=pageNum;
        this.pageSize=pageSize;
    }
    public void setMongoPage(long total, List<T> list){
        this.total=total;
        this.list=list;
    }
}

MyPage

package org.jeecg.modules.mongodbRelease.page;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyPage implements Serializable {
    protected Integer pageNum;//当前页
    protected Integer pageSize;//页大小
}

IMongoService

package org.jeecg.modules.mongodbRelease.service;

import org.apache.poi.ss.formula.functions.T;
import org.jeecg.modules.mongodbRelease.page.FuzzyPage;
import org.jeecg.modules.mongodbRelease.page.MongoPage;
import org.jeecg.modules.mongodbRelease.page.MyPage;

import java.io.Serializable;
import java.util.List;

public interface IMongoService<T> {

    /**
     * 增
     */
    boolean save(T entity);
    boolean save(T entity,String collectionName);
    boolean saveList(List<T> list);
    boolean saveList(List<T> list,String collectionName);

    /**
     * 删
     */
    boolean removeById(T entity);
    boolean removeById(T entity,String collectionName);
    /**
     * 改,都是通过id
     * @param keys 要修改的键名
     * @param values 要修改的键值
     * 相当于mysql中  update key1,key2,key3 set value1,value2,value3 where id=#{id} from collectionName
     */
    boolean updateById(String[] keys, Object[] values, Serializable id, Class<?> clazz);
    boolean updateById(String[] keys,Object[] values,Serializable id,String collectionName);
    boolean updateById(String[] keys,Object[] values,Serializable id,Class<?> clazz,String collectionName);

    /**
     * 查
     * @finById 就是根据id查询单条记录
     * @findByMap 相当于条件查询,查询出符合条件的所有内容
     * @findAll 查询表中所有记录
     * @fields 表示需要查询的字段---参考mysql中 select key1,key2,key3 from collectionName
     */
    T findById(Serializable id,Class<?> clazz);
    T findById(Serializable id,Class<?> clazz,String collectionName);
    T findById(Serializable id,String field,Class<?> clazz);
    T findById(Serializable id,String field,Class<?> clazz,String collectionName);
    List<T> findByMap(String[] keys,Object[] values,Class<?> clazz);
    List<T> findByMap(String[] keys,Object[] values,Class<?> clazz,String collectionName);
    List<T> findByMap(String[] keys,Object[] values,String field,Class<?> clazz);
    List<T> findByMap(String[] keys,Object[] values,String field,Class<?> clazz,String collectionName);
    List<T> findAll(Class<?> clazz);
    List<T> findAll(Class<?> clazz,String collectionName);
    List<T> findAll(String field,Class<?> clazz);
    List<T> findAll(String field,Class<?> clazz,String collectionName);
    /**
     * 分页---无总记录数,只查一次
     */
    List<T> page(MyPage myPage, Class<?> clazz);
    List<T> page(MyPage myPage, Class<?> clazz,String collectionName);
    List<T> page(MyPage myPage, String field,Class<?> clazz);
    List<T> page(MyPage myPage, String field,Class<?> clazz,String collectionName);
    /**
     * 分页--有总记录数,查两次
     */
    MongoPage page(MongoPage mongoPage, Class<?> clazz);
    MongoPage page(MongoPage mongoPage, Class<?> clazz,String collectionName);
    MongoPage page(MongoPage mongoPage,String field,Class<?> clazz);
    MongoPage page(MongoPage mongoPage,String field, Class<?> clazz,String collectionName);


    /**
     * 模糊查询---分页
     */
    List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String inputStr,String[] keys);
    List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String collectionName,String inputStr,String[] keys);
    List<T> fuzzyPage(MyPage myPage,Class<?> clazz, String inputStr,String[] keys,String field);
    List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String collectionName,String inputStr,String[] keys, String field);

    /**
     * 模糊查询---分页--有总记录数,查两次
     */
    MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz, String[] keys);
    MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz,String collectionName,String[] keys);
    MongoPage fuzzyPage(FuzzyPage fuzzyPage,Class<?> clazz,String[] keys,String field);
    MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz,String collectionName,String[] keys,String field);




}

IMongoServiceImpl

package org.jeecg.modules.mongodbRelease.service.impl;

import org.jeecg.modules.mongodbRelease.constant.MongoMethod;
import org.jeecg.modules.mongodbRelease.page.FuzzyPage;
import org.jeecg.modules.mongodbRelease.page.MongoPage;
import org.jeecg.modules.mongodbRelease.page.MyPage;
import org.jeecg.modules.mongodbRelease.service.IMongoService;
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.Field;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.List;
import java.util.regex.Pattern;

@Service
public class IMongoServiceImpl<T> implements IMongoService<T> {
    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public boolean save(T entity) {
        try{
            mongoTemplate.save(entity);
            mongoLogByConsole(MongoMethod.INSERT,entity.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean save(T entity, String collectionName) {
        try{
            mongoTemplate.save(entity,collectionName);
            mongoLogByConsole(MongoMethod.INSERT,entity.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean saveList(List<T> list) {
        try{
            mongoTemplate.insertAll(list);
            mongoLogByConsole(MongoMethod.INSERT,list.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean saveList(List<T> list, String collectionName) {
        try{
            mongoTemplate.insert(list,collectionName);
            mongoLogByConsole(MongoMethod.INSERT,list.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean removeById(T entity) {
        try{
            mongoTemplate.remove(entity);
            mongoLogByConsole(MongoMethod.DELETE,entity.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean removeById(T entity, String collectionName) {
        try{
            mongoTemplate.remove(entity,collectionName);
            mongoLogByConsole(MongoMethod.DELETE,collectionName+":"+entity.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean updateById(String[] keys, Object[] values, Serializable id, Class<?> clazz) {
        Criteria criteria= Criteria.where("_id").is(id);
        Query query=new Query(criteria);
        Update update=new Update();
        for (int i = 0; i < keys.length; i++) {
            update.set(keys[i],values[i]);
        }
        try{
            mongoTemplate.updateFirst(query,update,clazz);
            mongoLogByConsole(MongoMethod.UPDATE,update.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean updateById(String[] keys,Object[] values,Serializable id,String collectionName) {
        Criteria criteria=Criteria.where("_id").is(id);
        Query query=new Query(criteria);
        Update update=new Update();
        for (int i = 0; i < keys.length; i++) {
            update.set(keys[i],values[i]);
        }
        try{
            mongoTemplate.updateFirst(query,update,collectionName);
            mongoLogByConsole(MongoMethod.UPDATE,update.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public boolean updateById(String[] keys,Object[] values,Serializable id,Class<?> clazz,String collectionName) {
        Criteria criteria=Criteria.where("_id").is(id);
        Query query=new Query(criteria);
        Update update=new Update();
        for (int i = 0; i < keys.length; i++) {
            update.set(keys[i],values[i]);
        }
        try{
            mongoTemplate.updateFirst(query,update,clazz,collectionName);
            mongoLogByConsole(MongoMethod.UPDATE,update.toString());
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    @Override
    public T findById(Serializable id,Class<?> clazz) {
        T result;
        try {
            Criteria criteria = Criteria.where("_id").is(id);
            Query query = Query.query(criteria);
            result = (T) mongoTemplate.findOne(query, clazz);
            mongoLogByConsole(MongoMethod.SELECT,result.toString());
            return result;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public T findById(Serializable id, Class<?> clazz,String collectionName) {
        T result;
        try {
            Criteria criteria = Criteria.where("_id").is(id);
            Query query = Query.query(criteria);
            result = (T) mongoTemplate.findOne(query, clazz,collectionName);
            mongoLogByConsole(MongoMethod.SELECT,result.toString());
            return result;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public T findById(Serializable id,String fieldString,Class<?> clazz) {
        T result;
        try {
            Criteria criteria = Criteria.where("_id").is(id);
            Query query = Query.query(criteria);
            Field field=query.fields();
            field.include(fieldString);
            result = (T) mongoTemplate.findOne(query, clazz);
            mongoLogByConsole(MongoMethod.SELECT,result.toString());
            return result;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public T findById(Serializable id,String fieldString,Class<?> clazz,String collectionName) {
        T result;
        try {
            Criteria criteria = Criteria.where("_id").is(id);
            Query query = Query.query(criteria);
            Field field=query.fields();
            field.include(fieldString);
            result = (T) mongoTemplate.findOne(query, clazz,collectionName);
            mongoLogByConsole(MongoMethod.SELECT,result.toString());
            return result;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findByMap(String[] keys,Object[] values,Class<?> clazz) {
        Criteria criteria = null;
        List<T> list;
        try {
            for (int i = 0; i < keys.length; i++) {
                if (i == 0) {
                    criteria = Criteria.where(keys[i]).is(values[i]);
                } else {
                    criteria.and(keys[i]).is(values[i]);
                }
            }
            Query query = Query.query(criteria);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findByMap(String[] keys,Object[] values,Class<?> clazz,String collectionName) {
        Criteria criteria = null;
        List<T> list;
        try {
            for (int i = 0; i < keys.length; i++) {
                if (i == 0) {
                    criteria = Criteria.where(keys[i]).is(values[i]);
                } else {
                    criteria.and(keys[i]).is(values[i]);
                }
            }
            Query query = Query.query(criteria);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findByMap(String[] keys,Object[] values,String fieldString,Class<?> clazz) {
        Criteria criteria = null;
        List<T> list;
        try {
            for (int i = 0; i < keys.length; i++) {
                if (i == 0) {
                    criteria = Criteria.where(keys[i]).is(values[i]);
                } else {
                    criteria.and(keys[i]).is(values[i]);
                }
            }
            Query query = Query.query(criteria);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findByMap(String[] keys,Object[] values,String fieldString,Class<?> clazz,String collectionName) {
        Criteria criteria = null;
        List<T> list;
        try {
            for (int i = 0; i < keys.length; i++) {
                if (i == 0) {
                    criteria = Criteria.where(keys[i]).is(values[i]);
                } else {
                    criteria.and(keys[i]).is(values[i]);
                }
            }
            Query query = Query.query(criteria);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findAll(Class<?> clazz) {
        List<T> list;
        try{
            list= (List<T>) mongoTemplate.findAll(clazz);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findAll(Class<?> clazz,String collectionName) {
        List<T> list;
        try{
            list= (List<T>) mongoTemplate.find(new Query(),clazz,collectionName);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findAll(String fieldString,Class<?> clazz) {
        List<T> list;
        try{
            Query query = new Query(new Criteria());
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> findAll(String fieldString,Class<?> clazz,String collectionName) {
        List<T> list;
        try{
            Query query = new Query(new Criteria());
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.SELECT,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> page(MyPage myPage, Class<?> clazz) {
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.PAGE,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> page(MyPage myPage, Class<?> clazz, String collectionName) {
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.PAGE,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> page(MyPage myPage,String fieldString, Class<?> clazz) {
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.PAGE,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<T> page(MyPage myPage,String fieldString, Class<?> clazz,String collectionName) {
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.PAGE,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public MongoPage page(MongoPage mongoPage, Class<?> clazz) {
        Integer pageSize=mongoPage.getPageSize();
        Integer pageNum=mongoPage.getPageNum();
        long total;
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.MONGOPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public MongoPage page(MongoPage mongoPage, Class<?> clazz,String collectionName) {
        Integer pageSize=mongoPage.getPageSize();
        Integer pageNum=mongoPage.getPageNum();
        long total;
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.MONGOPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public MongoPage page(MongoPage mongoPage,String fieldString, Class<?> clazz) {
        Integer pageSize=mongoPage.getPageSize();
        Integer pageNum=mongoPage.getPageNum();
        long total;
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.MONGOPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public MongoPage page(MongoPage mongoPage,String fieldString, Class<?> clazz,String collectionName) {
        Integer pageSize=mongoPage.getPageSize();
        Integer pageNum=mongoPage.getPageNum();
        long total;
        List<T> list;
        try{
            Query query=new Query(new Criteria());
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.MONGOPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String inputStr,String[] keys){
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.fuzzyPage,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String collectionName,String inputStr,String[] keys){
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.fuzzyPage,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public List<T> fuzzyPage(MyPage myPage,Class<?> clazz, String inputStr,String[] keys,String fieldString){
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoLogByConsole(MongoMethod.fuzzyPage,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String collectionName,String inputStr,String[] keys, String fieldString){
        Integer pageSize=myPage.getPageSize();
        Integer pageNum=myPage.getPageNum();
        List<T> list;
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoLogByConsole(MongoMethod.fuzzyPage,list.toString());
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    @Override
    public MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz, String[] keys) {
        String inputStr=fuzzyPage.getInputStr();
        Integer pageSize=fuzzyPage.getPageSize();
        Integer pageNum=fuzzyPage.getPageNum();
        long total;
        List<T> list;
        MongoPage mongoPage=new MongoPage(pageNum,pageSize);
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.fuzzyPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public MongoPage fuzzyPage(FuzzyPage fuzzyPage,Class<?> clazz, String collectionName,String[] keys) {
        String inputStr=fuzzyPage.getInputStr();
        Integer pageSize=fuzzyPage.getPageSize();
        Integer pageNum=fuzzyPage.getPageNum();
        long total;
        List<T> list;
        MongoPage mongoPage=new MongoPage(pageNum,pageSize);
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.fuzzyPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz, String[] keys, String fieldString) {
        String inputStr=fuzzyPage.getInputStr();
        Integer pageSize=fuzzyPage.getPageSize();
        Integer pageNum=fuzzyPage.getPageNum();
        long total;
        List<T> list;
        MongoPage mongoPage=new MongoPage(pageNum,pageSize);
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.fuzzyPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz, String collectionName,String[] keys, String fieldString) {
        String inputStr=fuzzyPage.getInputStr();
        Integer pageSize=fuzzyPage.getPageSize();
        Integer pageNum=fuzzyPage.getPageNum();
        long total;
        List<T> list;
        MongoPage mongoPage=new MongoPage(pageNum,pageSize);
        try{
            if(judgeLength(keys.length)){
                return null;
            }
            Query query=new Query(getCriteria(inputStr,keys));
            //返回总记录数
            total=mongoTemplate.count(query,clazz);
            //默认值为5,
            pageSize = pageSize < 0 ? 5 : pageSize;
            query.limit(pageSize);
            query.skip((pageNum - 1) * pageSize);
            Field field=query.fields();
            field.include(fieldString);
            list= (List<T>) mongoTemplate.find(query,clazz,collectionName);
            mongoPage.setMongoPage(getTotalSum(total,pageSize),list);
            mongoLogByConsole(MongoMethod.fuzzyPage,mongoPage.toString());
            return mongoPage;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 用于模糊查询忽略大小写
     * @param str
     * @return
     */
    private Pattern getPattern(String str) {
        Pattern pattern = Pattern.compile("^.*" + str + ".*$", Pattern.CASE_INSENSITIVE);
        return pattern;
    }

    /**
     * 用于模糊查询
     * @param keys 匹配的字段数组
     * @param inputStr 输入的字符
     * @return
     */
    private Criteria getCriteria(String inputStr,String[] keys){
        Pattern pattern=getPattern(inputStr);
        Criteria criteria=null;
        switch (keys.length){
            case 1:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern));
                break;
            case 2:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern)
            );
                break;
            case 3:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern)
            );
                break;
            case 4:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern)
            );
                break;
            case 5:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern),
                    Criteria.where(keys[4]).regex(pattern)
            );
                break;
            case 6:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern),
                    Criteria.where(keys[4]).regex(pattern),
                    Criteria.where(keys[5]).regex(pattern)
            );
                break;
            case 7:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern),
                    Criteria.where(keys[4]).regex(pattern),
                    Criteria.where(keys[5]).regex(pattern),
                    Criteria.where(keys[6]).regex(pattern)
            );
                break;
            case 8:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern),
                    Criteria.where(keys[4]).regex(pattern),
                    Criteria.where(keys[5]).regex(pattern),
                    Criteria.where(keys[6]).regex(pattern),
                    Criteria.where(keys[7]).regex(pattern)
            );
                break;
            case 9:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern),
                    Criteria.where(keys[4]).regex(pattern),
                    Criteria.where(keys[5]).regex(pattern),
                    Criteria.where(keys[6]).regex(pattern),
                    Criteria.where(keys[7]).regex(pattern),
                    Criteria.where(keys[8]).regex(pattern)
            );
                break;
            case 10:criteria = Criteria.where("").orOperator(
                    Criteria.where(keys[0]).regex(pattern),
                    Criteria.where(keys[1]).regex(pattern),
                    Criteria.where(keys[2]).regex(pattern),
                    Criteria.where(keys[3]).regex(pattern),
                    Criteria.where(keys[4]).regex(pattern),
                    Criteria.where(keys[5]).regex(pattern),
                    Criteria.where(keys[6]).regex(pattern),
                    Criteria.where(keys[7]).regex(pattern),
                    Criteria.where(keys[8]).regex(pattern),
                    Criteria.where(keys[9]).regex(pattern)
            );
                break;
        }
        return criteria;
    }

    /**
     * 用于判断keys长度
     */
    private boolean judgeLength(int length){
        if(length>10||length==0){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 获取总页数
     * @param total
     * @param pageSize
     * @return
     */
    private long getTotalSum(long total,Integer pageSize){
        long totalSum=0;
        if(total%pageSize==0){//能够整除
            totalSum=total/pageSize;
        }else{
            totalSum=total/pageSize+1;
        }
        return totalSum;
    }
    /**
     * Mongodb控制台日志
     * @param method
     * @param toString
     */
    private void mongoLogByConsole(String method,String toString){
        String outPut="MongoDB";
        switch (method){
            case MongoMethod.INSERT:
                outPut=outPut+"  insert:"+toString;
                break;
            case MongoMethod.DELETE:
                outPut=outPut+"  delete:"+toString;
                break;
            case MongoMethod.UPDATE:
                outPut=outPut+"  update:"+toString;
                break;
            case MongoMethod.SELECT:
                outPut=outPut+"  query:"+toString;
                break;
            case MongoMethod.PAGE:
                outPut=outPut+"  page:"+toString;
                break;
            case MongoMethod.MONGOPage:
                outPut=outPut+"  mongoPage:"+toString;
                break;
            case MongoMethod.fuzzyPage:
                outPut=outPut+"  fuzzyPage:"+toString;
                break;
        }
        System.out.println(outPut);
    }
}