MongoTemplate 操作 mongodb
<p>1. 增加依赖</p><div class="cnblogs_code">
<pre> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>1.5.2.RELEASE</version>
</dependency></pre>
</div>
<p>2.增加配置</p>
<div class="cnblogs_code">
<pre>spring.data.mongodb.database=<span style="color: rgba(0, 0, 0, 1)">test
spring.data.mongodb.uri</span>=mongodb:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">user:password@192.168.1.2:27017/admin</span></pre>
</div>
<p> 3.Operator类</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.google.common.collect.ImmutableMap;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.g2.order.server.business.vo.common.PagedResult;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.mongodb.WriteResult;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.bson.types.ObjectId;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.beans.factory.annotation.Autowired;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.annotation.Id;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.FindAndModifyOptions;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.MongoTemplate;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.mapping.Document;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.query.Criteria;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.query.Update;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.stereotype.Component;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.util.Assert;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.util.CollectionUtils;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.query.Query;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.domain.Sort;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.List;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.Map;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> lombok.Data;
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 操作类.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MongoDbOperator<T><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> MongoTemplate mongoTemplate;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> Class<T><span style="color: rgba(0, 0, 0, 1)"> tClass;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> MongoDbOperator(MongoTemplate mongoTemplate, Class<T><span style="color: rgba(0, 0, 0, 1)"> classz) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.mongoTemplate =<span style="color: rgba(0, 0, 0, 1)"> mongoTemplate;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.tClass =<span style="color: rgba(0, 0, 0, 1)"> classz;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> T getOne(ObjectId id) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.findById(id, tClass);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> T getOne(String id) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> getOne(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ObjectId(id));
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> T getOne(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
Assert.notNull(filter, </span>"过滤条件不能为空"<span style="color: rgba(0, 0, 0, 1)">);
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.findOne(queryFilter, tClass);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 获取单个model
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 过滤条件
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> sort Sort theSort = new Sort(Sort.Direction.ASC, "_id");
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> T getOne(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter, Sort sort) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> queryFilter.with(sort);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.findOne(queryFilter, tClass);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 按访问时间倒序排列
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 过滤条件
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> sort 排序条件
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> limit前几个(0:不限制)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> List<T> list(Map<String, Object> filter, Sort sort, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> limit) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (sort != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> queryFilter.with(sort);
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (limit > 0<span style="color: rgba(0, 0, 0, 1)">) {
queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> queryFilter.limit(limit);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.find(queryFilter, tClass);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 按访问时间倒序排列
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 过滤条件
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span> count(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.count(queryFilter, tClass);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 分页查询
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 过滤条件
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> sort 排序条件
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> pageIndex 第几页
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> pageSize每页大小
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> PagedResult<T> pagedList(Map<String, Object> filter, Sort sort, <span style="color: rgba(0, 0, 255, 1)">int</span> pageIndex, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> pageSize) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
</span><span style="color: rgba(0, 0, 255, 1)">long</span> count =<span style="color: rgba(0, 0, 0, 1)"> count(queryFilter);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (sort != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> queryFilter.with(sort);
}
queryFilter </span>= queryFilter.skip((pageIndex - 1) *<span style="color: rgba(0, 0, 0, 1)"> pageSize).limit(pageSize);
List</span><T> subItems =<span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.find(queryFilter, tClass);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> PagedResult<>(subItems, pageIndex, pageSize, (<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">) count);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 按访问时间倒序排列
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 过滤条件
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> List<T> list(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> list(filter, <span style="color: rgba(0, 0, 255, 1)">null</span>, 0<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 插入新数据
* 返回的id在obj中赋值
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> insert(T obj) {
mongoTemplate.insert(obj);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> updateOne(String id, Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filedValues) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> updateOne(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ObjectId(id), filedValues);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> updateOne(ObjectId id, Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filedValues) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(id);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> updateImpl(queryFilter, filedValues);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> update(Map<String, Object> filter, Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filedValues) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> updateImpl(queryFilter, filedValues);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> exists(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> getOne(filter) != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 删除
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> id _id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> delete(String id) {
Query queryFilter </span>= getQueryFilter(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ObjectId(id));
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> delete(queryFilter);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 删除
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> id _id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> delete(ObjectId id) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(id);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> delete(queryFilter);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 删除
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 用户Id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> delete(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> delete(queryFilter);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 软删除
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> filter 用户Id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> softDelete(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
Query queryFilter </span>=<span style="color: rgba(0, 0, 0, 1)"> getQueryFilter(filter);
WriteResult result </span>= mongoTemplate.updateMulti(queryFilter, Update.update("isDel", 1<span style="color: rgba(0, 0, 0, 1)">), tClass);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result.getN();
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 根据当前表名获取自增id
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> collectionName 表名
* </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 自增id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> getNextSequence() {
String collectionName </span>=<span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.getCollectionName(tClass);
Query query </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Query(Criteria.where("_id"<span style="color: rgba(0, 0, 0, 1)">).is(collectionName));
Update update </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Update();
update.inc(</span>"seq", 1<span style="color: rgba(0, 0, 0, 1)">);
FindAndModifyOptions options </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FindAndModifyOptions();
options.upsert(</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
options.returnNew(</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
MongoSequence item </span>= mongoTemplate.findAndModify(query, update, options, MongoSequence.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> item.getSeq();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> count(Query queryFilter) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.count(queryFilter, tClass);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 删除
*
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> queryFilter 用户Id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> delete(Query queryFilter) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.remove(queryFilter, tClass).getN();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">int</span> updateImpl(Query queryFilter, Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filedValues) {
Update updateOperations </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Update();
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (Map.Entry<String, Object><span style="color: rgba(0, 0, 0, 1)"> entry : filedValues.entrySet()) {
updateOperations.set(entry.getKey(), entry.getValue());
}
WriteResult writeResult </span>=<span style="color: rgba(0, 0, 0, 1)"> mongoTemplate.updateMulti(queryFilter, updateOperations, tClass);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> writeResult.getN();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Query getQueryFilter(ObjectId id) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> getQueryFilter(ImmutableMap.of("_id"<span style="color: rgba(0, 0, 0, 1)">, id));
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> Query getQueryFilter(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filter) {
Query query </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Query();
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (CollectionUtils.isEmpty(filter)) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> query;
}
Criteria criteria </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Criteria();
</span><span style="color: rgba(0, 0, 255, 1)">boolean</span> w = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (Map.Entry<String, Object><span style="color: rgba(0, 0, 0, 1)"> entry : filter.entrySet()) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">w) {
criteria </span>=<span style="color: rgba(0, 0, 0, 1)"> (Criteria.where(entry.getKey()).is(entry.getValue()));
w </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
criteria </span>=<span style="color: rgba(0, 0, 0, 1)"> criteria.and(entry.getKey()).is(entry.getValue());
}
}
query.addCriteria(criteria);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> query;
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> Update getUpdateOperations(Map<String, Object><span style="color: rgba(0, 0, 0, 1)"> filedValues) {
Update updateOperations </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Update();
updateOperations.inc(</span>"version", 1<span style="color: rgba(0, 0, 0, 1)">);
updateOperations.set(</span>"lastModifyTime"<span style="color: rgba(0, 0, 0, 1)">, System.currentTimeMillis());
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (Map.Entry<String, Object><span style="color: rgba(0, 0, 0, 1)"> entry : filedValues.entrySet()) {
updateOperations.set(entry.getKey(), entry.getValue());
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> updateOperations;
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Update getSoftDeleteOperations() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> getUpdateOperations(ImmutableMap.of("deleted", <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">));
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 自增序列维护表
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Data
@Document(collection </span>= "___MongoSequence___"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MongoSequence {
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 表名做主键
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Id
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String id;
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 对应表的最新自增id
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> seq;
}
}</span></pre>
</div>
<p> </p>
<p>4.mongodb不保存"_class"字段的配置</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.beans.factory.BeanFactory;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.beans.factory.NoSuchBeanDefinitionException;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.context.annotation.Bean;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.context.annotation.Configuration;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.MongoDbFactory;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.convert.CustomConversions;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.convert.DbRefResolver;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.convert.MappingMongoConverter;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.mapping.MongoMappingContext;
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 覆盖原有的Convert,新的convert不保存_class字段
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Configuration
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> SpringMongodbTemplateConfig {
@Bean
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context,
BeanFactory beanFactory) {
DbRefResolver dbRefResolver </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MappingMongoConverter(dbRefResolver, context);
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">));
} </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (NoSuchBeanDefinitionException ignore) {
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不保存 _class 到 mongo</span>
mappingConverter.setTypeMapper(<span style="color: rgba(0, 0, 255, 1)">new</span> DefaultMongoTypeMapper(<span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mappingConverter;
}
}</span></pre>
</div>
<p> </p>
<p>5.测试model类</p>
<div class="cnblogs_code">
<pre>@Document(collection = "login_log"<span style="color: rgba(0, 0, 0, 1)">)
@Data
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> LoginLog {
@Id
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String id;
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String customerId;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> lastLoginTime;
}</span></pre>
</div>
<p> </p>
<p> 6.接口</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.google.common.collect.ImmutableMap;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.g2.order.server.business.MongoDbOperator;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> com.g2.order.server.business.vo.LoginLog;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.beans.factory.annotation.Autowired;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.MongoTemplate;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.query.Criteria;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.data.mongodb.core.query.Query;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.web.bind.annotation.RequestMapping;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.web.bind.annotation.RequestMethod;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.web.bind.annotation.RestController;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.util.List;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> javax.annotation.PostConstruct;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> io.swagger.annotations.Api;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> io.swagger.annotations.ApiOperation;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> lombok.extern.slf4j.Slf4j;
@Api(value </span>= "MongodbController", description = "登陆日志接口"<span style="color: rgba(0, 0, 0, 1)">)
@RestController
@RequestMapping(</span>"/loginLog"<span style="color: rgba(0, 0, 0, 1)">)
@Slf4j
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MongodbController {
@Autowired
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> MongoTemplate template;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> MongoDbOperator<LoginLog><span style="color: rgba(0, 0, 0, 1)"> mongoDbOperator;
@PostConstruct
</span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> init() {
mongoDbOperator </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> MongoDbOperator<>(template, LoginLog.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 使用MongoTemplate查询数据
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@ApiOperation(value </span>= "获取用户的登陆日志", notes = "获取用户的登陆日志"<span style="color: rgba(0, 0, 0, 1)">)
@RequestMapping(value </span>= "/list"<span style="color: rgba(0, 0, 0, 1)">,
method </span>=<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String list(String key) {
Query query </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Query();
query.addCriteria(Criteria.where(</span>"customerId"<span style="color: rgba(0, 0, 0, 1)">).is(Integer.parseInt(key)));
List</span><LoginLog> clientDevices = template.find(query, LoginLog.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> clientDevices.toString();
}
@ApiOperation(value </span>= "获取用户的登陆日志2", notes = "获取用户的登陆日志2"<span style="color: rgba(0, 0, 0, 1)">)
@RequestMapping(value </span>= "/list2"<span style="color: rgba(0, 0, 0, 1)">,
method </span>=<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String list2(String key) {
LoginLog model </span>= mongoDbOperator.getOne(ImmutableMap.of("customerId"<span style="color: rgba(0, 0, 0, 1)">, Integer.parseInt(key)));
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> model.toString();
}
@ApiOperation(value </span>= "新增用户登录日志", notes = "新增用户登录日志"<span style="color: rgba(0, 0, 0, 1)">)
@RequestMapping(value </span>= "/add"<span style="color: rgba(0, 0, 0, 1)">,
method </span>=<span style="color: rgba(0, 0, 0, 1)"> RequestMethod.GET)
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String add(String customerId) {
LoginLog model </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> LoginLog();
model.setId(mongoDbOperator.getNextSequence());
model.setCustomerId(customerId);
model.setLastLoginTime(System.currentTimeMillis());
mongoDbOperator.insert(model);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> model.toString();
}
}</span></pre>
</div><br><br>
来源:https://www.cnblogs.com/zhshlimi/p/12177538.html
頁:
[1]