maven pom.xml依赖
<!--spring结合mongodb--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.7.1.RELEASE</version> </dependency>
spring-mongodb.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.ylzinfo.*" /> <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}"> <mongo:options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" auto-connect-retry="${mongo.autoConnectRetry}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" slave-ok="${mongo.slaveOk}" write-number="1" write-timeout="0" write-fsync="true"/> </mongo:mongo> <!-- 设置使用的数据库 名--> <mongo:db-factory id="mongoDbFactory" dbname="wxsb" mongo-ref="mongo" username="${mongo.username}" password="${mongo.password}"/> <!-- mongodb的模板 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean> </beans>
mongodb.properties配置
profile.active=dev mongo.host=192.168.44.101 mongo.port=27017 mongo.username= mongo.password= #一个线程变为可用的最大阻塞数 mongo.connectionsPerHost=8 #线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值 mongo.threadsAllowedToBlockForConnectionMultiplier=4 #连接超时时间 mongo.connectTimeout=1000 #等待时间 mongo.maxWaitTime=1500 #自动重连 mongo.autoConnectRetry=true #scoket保持活动 mongo.socketKeepAlive=true #Socket超时时间 mongo.socketTimeout=1500 #读写分离 mongo.slaveOk=true
定义BaseMongoDao,使用MongoTemplate,操作mongodb
public abstract class BaseMongoDao<T> { @Autowired protected MongoTemplate mongoTemplate; /** * 保存一个对象 * @param t */ public void save(T t) { this.mongoTemplate.save(t); } /** * 批量保存对象 * @param list */ public void insertList(List<T> list) { this.mongoTemplate.insertAll(list); } /** * 查询所有 * @return */ public List<T> queryAll() { return this.mongoTemplate.findAll(this.getEntityClass()); } /** * 根据Id从Collection中查询对象 * @param id * @return */ public T queryById(String id) { Query query = new Query(); Criteria criteria = Criteria.where("_id").is(id); query.addCriteria(criteria); return this.mongoTemplate.findOne(query, this.getEntityClass()); } /** * 根据条件查询集合 * @param query * @return */ public List<T> queryList(Query query) { return this.mongoTemplate.find(query, this.getEntityClass()); } /** * 通过条件查询单个实体 * @param query * @return */ public T queryOne(Query query) { return this.mongoTemplate.findOne(query, this.getEntityClass()); } /** * 通过条件进行分页查询 * @param query * @param start * @param size * @return */ public List<T> getPage(Query query, int start, int size) { query.skip(start); query.limit(size); List<T> lists = this.mongoTemplate.find(query, this.getEntityClass()); return lists; } /** * 根据条件查询库中符合记录的总数,为分页查询服务 * @param query * @return */ public Long getPageCount(Query query) { return this.mongoTemplate.count(query, this.getEntityClass()); } /** * 根据Id删除用户 * @param id */ public void deleteById(String id) { Criteria criteria = Criteria.where("_id").in(id); if (null != criteria) { Query query = new Query(criteria); if (null != query && this.queryOne(query) != null) { this.mongoTemplate.remove(query); } } } /** * 更新满足条件的第一个记录 * @param query * @param update */ public void updateFirst(Query query, Update update) { this.mongoTemplate.updateFirst(query, update, this.getEntityClass()); } /** * 更新满足条件的所有记录 * @param query * @param update */ public void updateMulti(Query query, Update update) { this.mongoTemplate.updateMulti(query, update, this.getEntityClass()); } /** * 查找更新,如果没有找到符合的记录,则将更新的记录插入库中 * @param query * @param update */ public void updateInser(Query query, Update update) { this.mongoTemplate.upsert(query, update, this.getEntityClass()); } /** * 删除对象 * @param t * @return */ public Integer delete(T t) { WriteResult writeResult = this.mongoTemplate.remove(t); return (null == writeResult ? 0 : writeResult.getN()); } /** * 删除对象 * @param query * @return */ public Integer deleteByCondition(Query query) { WriteResult writeResult = this.mongoTemplate.remove(query, this.getEntityClass()); return (null == writeResult ? 0 : writeResult.getN()); } /** * 为属性自动注入bean服务 * @param mongoTemplate */ public void setMongoTemplate(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } protected abstract Class<T> getEntityClass(); }
然后,自行定义具体的继承实现类
最后在service实现类里引用自定义的Dao,进行保存日志。这里不介绍了。