千家信息网

spring4.3.7整合mongodb3.2.1

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,前几天写了个mongodb原生的工具类,参考"http://ylcodes01.blog.51cto.com/5607366/1933342",项目里需要做分布式,所以现在集成到spring中,今天结
千家信息网最后更新 2026年11月01日spring4.3.7整合mongodb3.2.1

前几天写了个mongodb原生的工具类,参考"http://ylcodes01.blog.51cto.com/5607366/1933342",

项目里需要做分布式,所以现在集成到spring中,今天结合spring-mongodb写了一些常用的工具。



BaseMongoDao

package com.stbr.common.mongodb.base;import com.mongodb.WriteResult;import com.stbr.common.mongodb.util.MongoFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Sort;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 java.lang.reflect.ParameterizedType;import java.util.List;import java.util.Map;public class BaseMongoDao implements  IBaseMongoDao{    private Class clazz;    @Autowired    private MongoTemplate mongoTemplate;    @Autowired    private MongoFactory mongoFactory;    public BaseMongoDao() {        ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();        clazz = (Class) parameterizedType.getActualTypeArguments()[0];    }    @Override    public void insert(T entity) {        mongoTemplate.insert(entity);    }    @Override    public T findOne(String id) {        Query query = new Query();        query.addCriteria(new Criteria("_id").is(id));        return getMongoTemplate().findOne(query,clazz);    }    @Override    public List find(Query query) {        return getMongoTemplate().find(query,clazz);    }    @Override    public Long findCount(Query query) {        return getMongoTemplate().count(query,clazz);    }    @Override    public List findList(Integer skip, Integer limit,Query query) {        query.with(new Sort(new Sort.Order(Sort.Direction.ASC,"createTime")));        query.skip(skip).limit(limit);        return find(query);    }    @Override    public Integer update(Query query, Update update) throws Exception {        WriteResult writeResult = getMongoTemplate().updateFirst(query,update,clazz);        return (null == writeResult ? 0 : writeResult.getN());    }    @Override    public Integer update(T entity) throws Exception {        Map map = mongoFactory.converObjectToParams(entity);        Query query = new Query();        query.addCriteria(new Criteria("_id").is(map.get("id")));        Update update = (Update) map.get("update");        return this.update(query,update);    }    @Override    public Integer remove(T entity) {        WriteResult writeResult = getMongoTemplate().remove(entity);        return (null == writeResult ? 0 : writeResult.getN());    }    @Override    public Integer remove(Query query, T entity) {        WriteResult writeResult = getMongoTemplate().remove(query,entity.getClass());        return (null == writeResult ? 0 : writeResult.getN());    }    public MongoTemplate getMongoTemplate(){        return mongoTemplate;    }}



IBaseMongoDao

package com.stbr.common.mongodb.base;import org.springframework.data.mongodb.core.query.Query;import org.springframework.data.mongodb.core.query.Update;import java.util.List;public interface IBaseMongoDao {    public T findOne(String id);    public List find(Query query);    public Long findCount(Query query);    public List findList(Integer skip,Integer limit,Query query);    public void insert(T entity);    public Integer update(Query query, Update update) throws Exception;    public Integer update(T entity) throws Exception;    public Integer remove(T entity);    public Integer remove(Query query,T entity);}



IMongoEntityDao

package com.stbr.common.mongodb.dao;import com.stbr.common.mongodb.base.IBaseMongoDao;import com.stbr.common.mongodb.model.MongoEntity;public interface IMongoEntityDao extends IBaseMongoDao{    public MongoEntity getMongoEntityById(String id);}



MongoEntityDao


package com.stbr.common.mongodb.dao;import com.stbr.common.mongodb.base.BaseMongoDao;import com.stbr.common.mongodb.model.MongoEntity;import org.springframework.stereotype.Repository;@Repositorypublic class MongoEntityDao extends BaseMongoDao implements IMongoEntityDao{    @Override    public MongoEntity getMongoEntityById(String id) {        MongoEntity mongoEntity = findOne(id);        return mongoEntity;    }}




MongoEntity


package com.stbr.common.mongodb.model;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "mongoLogInfo")public class MongoEntity {    @Id    private String id;//主键    private String interfaceMethod;//接口方法名称    private String businessName;//业务名称    private String clientReqParams;//客户端请求参数    private String serviceRepParams;//服务端响应参数    private String logInfo;//日志内容:包括异常等    private Long clientReqTime;//客户端调用时间    private Long serviceRepTime;//服务端响应时间    private Long duration;//持续时间    private String clientReqIpPort;//客户端请求IP和PORT    private String serviceRepIpPort;//服务端响应IP和PORT    private String ifSuccess;//服务调用是否成功标识,1成功2失败    private Long createTime;//插入时间    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getInterfaceMethod() {        return interfaceMethod;    }    public void setInterfaceMethod(String interfaceMethod) {        this.interfaceMethod = interfaceMethod;    }    public String getBusinessName() {        return businessName;    }    public void setBusinessName(String businessName) {        this.businessName = businessName;    }    public String getClientReqParams() {        return clientReqParams;    }    public void setClientReqParams(String clientReqParams) {        this.clientReqParams = clientReqParams;    }    public String getServiceRepParams() {        return serviceRepParams;    }    public void setServiceRepParams(String serviceRepParams) {        this.serviceRepParams = serviceRepParams;    }    public String getLogInfo() {        return logInfo;    }    public void setLogInfo(String logInfo) {        this.logInfo = logInfo;    }    public Long getClientReqTime() {        return clientReqTime;    }    public void setClientReqTime(Long clientReqTime) {        this.clientReqTime = clientReqTime;    }    public Long getServiceRepTime() {        return serviceRepTime;    }    public void setServiceRepTime(Long serviceRepTime) {        this.serviceRepTime = serviceRepTime;    }    public Long getDuration() {        return duration;    }    public void setDuration(Long duration) {        this.duration = duration;    }    public String getClientReqIpPort() {        return clientReqIpPort;    }    public void setClientReqIpPort(String clientReqIpPort) {        this.clientReqIpPort = clientReqIpPort;    }    public String getServiceRepIpPort() {        return serviceRepIpPort;    }    public void setServiceRepIpPort(String serviceRepIpPort) {        this.serviceRepIpPort = serviceRepIpPort;    }    public String getIfSuccess() {        return ifSuccess;    }    public void setIfSuccess(String ifSuccess) {        this.ifSuccess = ifSuccess;    }    public Long getCreateTime() {        return createTime;    }    public void setCreateTime(Long createTime) {        this.createTime = createTime;    }}




MongoFactory

package com.stbr.common.mongodb.util;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.query.Update;import org.springframework.stereotype.Component;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;@Componentpublic class MongoFactory {    @Autowired    private MongoObjectParams objectParams;    public Map converObjectToParams(Object object) throws Exception {        Map map = new HashMap();        Update update = new Update();        Map params = objectParams.createParams(object);        String id = params.get("id");        Set> sets = params.entrySet();        Iterator> iteratos = sets.iterator();        while(iteratos.hasNext()){            Map.Entry entry = iteratos.next();            String key = entry.getKey();            String value = entry.getValue();            if(!key.equals("id")){                update.set(key,value);            }        }        map.put("id",id);        map.put("update",update);        return map;    }}


MongoObjectParams

package com.stbr.common.mongodb.util;import org.springframework.stereotype.Component;import java.lang.reflect.Field;import java.util.HashMap;import java.util.Map;@Componentpublic class MongoObjectParams {    private  String javaType = "java";    /**     * 获取查询的参数     *     * @param object     * @return     * @throws Exception     */    public  Map createParams(Object object) throws Exception {        Map params = new HashMap();        setIntoParams(params,object, null);        return params;    }    private  void setIntoParams(Map params,Object object, String fatherName) throws IllegalAccessException,            Exception {        Field[] fields = object.getClass().getDeclaredFields();        for (Field file : fields) {            boolean accessFlag = file.isAccessible();            file.setAccessible(true);            String name = file.getName();            Object value = file.get(object);            if(file.getType().getName().equals("java.lang.Class")){                break;            }else if(file.getType().getName().contains(javaType)){                if(fatherName != null && !fatherName.equals(" ")){                    name = fatherName+"."+name;                }                if(value != null){                    params.put(name, value+"");                }            }else{                if(value != null){                    setIntoParams(params,file.get(object), name);                }            }            file.setAccessible(accessFlag);        }    }}






MongoTimestampConverter

package com.stbr.common.mongodb.util;import org.springframework.core.convert.converter.Converter;import java.sql.Timestamp;import java.util.Date;public class MongoTimestampConverter implements Converter {    @Override    public Timestamp convert(Date date) {        if(null != date){            return new Timestamp(date.getTime());        }        return null;    }}




mongo.properties

mongo.host=192.168.200.234mongo.port=10143



spring-mongodb.xml

                                                                                                                                                                                    


#上述spring-mongodb.xml要注意的地方:由于现在用的是mongodb3.X版本,所以

就不要使用mongo:mongo标签了,要改成mongo:mongo-client,一些参数要改变了,

具体看下源码和文档即可。

可能报错如下:

mongo-options' is no longer supported for MongoDB



MongdbTest


package com.stbr.common.mongodb.test;import com.stbr.common.mongodb.dao.IMongoEntityDao;import com.stbr.common.mongodb.model.MongoEntity;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;import java.util.Date;import java.util.List;@RunWith(SpringJUnit4Cla***unner.class)@ContextConfiguration(locations = "classpath:spring-mongodb.xml")public class MongdbTest {    @Autowired    private IMongoEntityDao mongoEntityDao;    /**     * 根据主键获取实体     */    @Test    public void testFindOne(){        MongoEntity mongoEntity = mongoEntityDao.getMongoEntityById("593e3f8ba4977227581b398c");        System.out.println(mongoEntity);    }    /**     * 根据过滤条件获取集合列表     */    @Test    public void testFind(){        Query query = new Query();        List list1 = mongoEntityDao.find(query);        System.out.println(list1.size());        query = new Query();        query.addCriteria(new Criteria("InterfaceMethod").nin("InterfaceMethod5"));        List list2 = mongoEntityDao.find(query);        for(MongoEntity mongoEntity : list2){            System.out.println(mongoEntity);        }    }    /**     * 根据过滤条件获取查询个数     */    @Test    public void testFindCount(){        Query query = new Query();        query.addCriteria(new Criteria("InterfaceMethod").nin("InterfaceMethod5"));        System.out.println(mongoEntityDao.findCount(query));    }    /**     * 根据过滤条件获取分页集合     * skip:从第几条开始,但不包括这条数据     * limit:每页几条数据     */    @Test    public void testFindList(){        Query query = new Query();        query.addCriteria(new Criteria("InterfaceMethod").nin("InterfaceMethod11"));        List list = mongoEntityDao.findList(10,5,query);        for(MongoEntity mongoEntity : list){            System.out.println(mongoEntity.getBusinessName());        }    }    /**     * 实体新增     */    @Test    public void testInsert(){        for(int i = 7; i < 30 ; i++){            MongoEntity mongoEntity = new MongoEntity();            mongoEntity.setInterfaceMethod("InterfaceMethod" + i);            mongoEntity.setBusinessName("BusinessName" + i);            mongoEntity.setClientReqIpPort("ClientReqIpPort" + i);            mongoEntity.setServiceRepIpPort("ServiceRepIpPort" + i);            mongoEntity.setLogInfo("LogInfo" + i);            Long time1 = new Date().getTime();            mongoEntity.setClientReqTime(time1);            Long time2 = new Date().getTime();            mongoEntity.setServiceRepTime(time2);            mongoEntity.setDuration(time2 - time1);            mongoEntity.setClientReqIpPort("ClientReqIpPort" + i);            mongoEntity.setServiceRepIpPort("ServiceRepIpPort" + i);            mongoEntity.setIfSuccess("1");            mongoEntity.setCreateTime(new Date().getTime());            mongoEntityDao.insert(mongoEntity);        }    }    /**     * 通过传入的实体ID更新实体中的其他内容     * @throws Exception     */    @Test    public void testUpdateEntity() throws Exception{        MongoEntity mongoEntity = mongoEntityDao.findOne("593e3f8ba4977227581b398c");        System.out.println("1------------->" + mongoEntity.getBusinessName());        mongoEntity.setBusinessName("setBusinessNametest");        mongoEntityDao.update(mongoEntity);        mongoEntity = mongoEntityDao.findOne("593e3f8ba4977227581b398c");        System.out.println("2------------->" + mongoEntity.getBusinessName());    }    /**     * 删除实体对象     */    @Test    public void testRemove(){        MongoEntity mongoEntity = mongoEntityDao.findOne("593e4f1ca4977223d8f705aa");        System.out.println(mongoEntity);        mongoEntityDao.remove(mongoEntity);        mongoEntity = mongoEntityDao.findOne("593e4f1ca4977223d8f705aa");        System.out.println(mongoEntity);    }    /**     * 通过过滤条件和实体对象删除对应数据     */    @Test    public void testRemoveByQuery(){        Query query = new Query();        query.addCriteria(new Criteria("_id").is("593e4f1ca4977223d8f705a3"));        MongoEntity entity = new MongoEntity();        System.out.println(mongoEntityDao.remove(query,entity));    }}



pom.xml(图片中的项目名和下述的pom.xml中的项目名不一致,修改下即可)


  4.0.0  TestSpringMongo3  TestSpringMongo3  war  1.0-SNAPSHOT  TestSpringMongo3 Maven Webapp                  nexus-repos      Team Nexus Repository      http://192.168.200.205:8081/nexus/content/groups/public/              true                    true                          nexus-repos      Team Nexus Repository      http://192.168.200.205:8081/nexus/content/groups/public/              true                    true                  ${project.build.directory}/endorsed    UTF-8        7.0    3.1.0    1.2    1.2.16    1.7.1    4.12    2.1    4.3.7.RELEASE    1.10.4.RELEASE    3.4.2    1.1.0.Final    5.0.2.Final              junit      junit      ${junit.version}      test              javax      javaee-web-api      ${javax.version}      provided              javax.servlet      jstl      ${javax.servlet.jstl.version}      runtime              javax.servlet      javax.servlet-api      ${javax.servlet.version}              org.slf4j      slf4j-jdk14      ${org.slf4j.version}              log4j      log4j      ${log4j.version}              org.htmlparser      htmlparser      ${org.htmlparser.version}                  org.springframework      spring-aop      ${org.springframework.version}              org.springframework      spring-context-support      ${org.springframework.version}              org.springframework      spring-beans      ${org.springframework.version}              org.springframework      spring-context      ${org.springframework.version}              org.springframework      spring-core      ${org.springframework.version}              org.springframework      spring-expression      ${org.springframework.version}              org.springframework      spring-web      ${org.springframework.version}              org.springframework      spring-webmvc      ${org.springframework.version}              org.springframework      spring-test      ${org.springframework.version}      test              org.springframework.data      spring-data-mongodb      ${spring-data-mongodb.version}                  javax.validation      validation-api      ${javax.validation.version}              org.hibernate      hibernate-validator      ${org.hibernate.version}          TestSpringMongo3            src/main/java              **/*.xml        **/*.properties            false              src/main/resources              **/*.xml        **/*.properties            false                  maven-compiler-plugin      2.5.1              1.6        1.6        UTF-8                    maven-surefire-plugin      2.12.4                        **/*Tests.java                            org.apache.maven.plugins      maven-resources-plugin      2.6              UTF-8            




#上述pom.xml一定要注意一个问题:

当上述org.hibernate.version配置为5.0.2.Final改成5.4.1Final时,那么要多一个配置,如下:

2.2.4org.glassfish.webjavax.el${javax.el-version}


不然,也许会报错如下:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead

Caused by: javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead

at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:102)

at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.(ResourceBundleMessageInterpolator.java:45)

at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolator(ConfigurationImpl.java:423)

Caused by: javax.el.ELException: Provider com.sun.el.ExpressionFactoryImpl not found

Caused by: java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl



参数 实体 时间 条件 服务 客户 客户端 数据 项目 UTF-8 成功 名称 对象 工具 查询 配置 一致 业务 个数 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京互联网科技公司 亿账通互联网科技 上海万想互联网科技 联恩商钥互联网科技有限公司 互联网巨头投资的硬核科技 科技大学互联网专业好不好 中国最先进互联网科技公司 富国互联网科技创新基金 辽宁互联网新科技 成都互联网科技公司工作好不好 朱啸虎曾投资哪些互联网科技企业 合肥互联网科技公司公章图片 互联网领先科技宣传片 张召忠谈中国互联网科技 互联网与数字科技关系 广州燕处互联网科技有限公司 国产互联网科技公司 杭州融税互联网科技有限公司 数字科技和互联网金融哪个好 互联网科技创业有什么好项目 互联网科技园 互联网科技图片 互联网最新的科技 腾讯阿里互联网科技 没上市的科技互联网公司 科技互联网大厂 未来五年的互联网科技 南通创西澳互联网科技有限公司 江苏互联网科技小贷 平安好医生打造互联网科技医疗
0