如何去掉保存mongodb數(shù)據(jù)時(shí)出現(xiàn)的_class字段
配置如下:
application.yml文件內(nèi)容如下
spring:
data:
mongodb:
host: 192.168.9.234 #指定MongoDB服務(wù)地址
port: 27017 #指定端口,默認(rèn)就為27017
database: blog #指定使用的數(shù)據(jù)庫(集合)
authentication-database: admin # 登錄認(rèn)證的邏輯庫名
username: admin #用戶名
password: 123456 #密碼
main:
banner-mode: off
server:
port: 8080
公共類如下
IBasicDao類:
package com.zingrow.blog.common;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import java.util.List;
public interface IBasicDao<T> {
/**
* 查詢數(shù)據(jù)
*
* @param query
* @return
*/
List<T> find(Query query);
/**
* 分頁查詢
*
* @param query
* @param start
* @param size
* @return
*/
List<T> findList(Query query, int start, int size);
/**
* 根據(jù)ID查詢
*
* @param id
* @return
*/
T findOne(String id);
/**
* 插入一條數(shù)據(jù)
*
* @param entity
*/
void insert(T entity);
/**
* 更新數(shù)據(jù)
*
* @param query
* @param update
* @return
*/
UpdateResult update(Query query, Update update);
/**
* 根據(jù)實(shí)體類刪除數(shù)據(jù)
*
* @param entity
* @return
*/
DeleteResult delete(T entity);
/**
* 根據(jù)query刪除數(shù)據(jù)
*
* @param query
* @return
*/
DeleteResult remove(Query query);
long count();
long count(Query query);
void save(T entity);
List<T> findAll();
List<T> findByKeyAndValue(String key, String Value);
List<T> findByKeyAndValue(String key, String Value, int start, int limit);
void upsert(Query query, Update update);
MongoTemplate getMongoTemplate();
}
其實(shí)現(xiàn)類BasicDao內(nèi)容如下
package com.zingrow.blog.common;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
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;
public class BasicDao<T> implements IBasicDao<T> {
private Class<T> clazz;
public BasicDao() {
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[0];
}
@Autowired
private MongoTemplate mongoTemplate;
@Override
public List<T> find(Query query) {
return mongoTemplate.find(query, clazz);
}
@Override
public List<T> findList(Query query, int start, int size) {
query.with(Sort.by(new Sort.Order(Sort.Direction.ASC, "_id")))
.skip(start)
.limit(size);
return mongoTemplate.find(query, clazz);
}
@Override
public T findOne(String id) {
Query query = new Query();
query.addCriteria(new Criteria("_id").is(id));
return mongoTemplate.findOne(query, clazz);
}
@Override
public void insert(T entity) {
mongoTemplate.insert(entity);
}
@Override
public UpdateResult update(Query query, Update update) {
return mongoTemplate.updateMulti(query, update, clazz);
}
@Override
public DeleteResult delete(T entity) {
return mongoTemplate.remove(entity);
}
@Override
public DeleteResult remove(Query query) {
return mongoTemplate.remove(query, clazz);
}
public DeleteResult remove(String id) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(id));
return mongoTemplate.remove(query, clazz);
}
@Override
public long count() {
Query query = new Query();
return mongoTemplate.count(query, clazz);
}
@Override
public long count(Query query) {
return mongoTemplate.count(query, clazz);
}
@Override
public void save(T entity) {
mongoTemplate.save(entity);
}
@Override
public List<T> findAll() {
Query query = new Query();
return find(query);
}
@Override
public List<T> findByKeyAndValue(String key, String Value) {
Query query = new Query(Criteria.where(key).is(Value));
return mongoTemplate.find(query, clazz);
}
@Override
public List<T> findByKeyAndValue(String key, String Value, int start, int limit) {
Query query = new Query(Criteria.where(key).is(Value));
query.skip(start).limit(limit);
return mongoTemplate.find(query, clazz);
}
@Override
public void upsert(Query query, Update update) {
mongoTemplate.upsert(query, update, clazz);
}
@Override
public MongoTemplate getMongoTemplate() {
return mongoTemplate;
}
}
實(shí)體類(Article)如下
package com.zingrow.blog.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "article")
public class Article {
@Id
private String id;
private String title;
private String classify;
private String content;
private String time;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getClassify() {
return classify;
}
public void setClassify(String classify) {
this.classify = classify;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public Article(String id, String title, String classify, String content, String time) {
this.id = id;
this.title = title;
this.classify = classify;
this.content = content;
this.time = time;
}
@Override
public String toString() {
return "Article{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", classify='" + classify + '\'' +
", content='" + content + '\'' +
", time='" + time + '\'' +
'}';
}
}
服務(wù)實(shí)現(xiàn)類(ArticleServiceImpl)
package com.zingrow.blog.service;
import com.zingrow.blog.common.BasicDao;
import com.zingrow.blog.entity.Article;
import org.springframework.stereotype.Service;
@Service
public class ArticleServiceImpl extends BasicDao<Article> {
}
控制類(ArticleController)
package com.zingrow.blog.contronller;
import com.zingrow.blog.entity.Article;
import com.zingrow.blog.service.ArticleServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin(value = "*", maxAge = 300)
public class ArticleController {
@Autowired
private ArticleServiceImpl articleService;
@GetMapping("add")
public String add(Article article) {
articleService.insert(article);
return article.toString();
}
}
成功插入數(shù)據(jù)后

發(fā)現(xiàn)多了個(gè)_class字段,解決辦法如下
新建配置類(MongoConfig)
package com.zingrow.blog.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@Configuration
public class MongoConfig {
@Bean(name = "mongoTemplate")
public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDatabaseFactory, MongoMappingContext mongoMappingContext) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
//去掉_class字段
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(mongoDatabaseFactory,mappingConverter);
}
}
結(jié)果如下

失敗案例:
新建配置類(在實(shí)際項(xiàng)目引入時(shí)可能會(huì)報(bào)MongoDbFactory已被廢棄)
@Configuration
public class MongoConfig {
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
try {
mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
} catch (NoSuchBeanDefinitionException ignore) {
}
// Don't save _class to mongo
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
以上就是如何去掉保存mongodb數(shù)據(jù)時(shí)出現(xiàn)的_class字段的詳細(xì)內(nèi)容,更多關(guān)于mongodb出現(xiàn)_class字段的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MongoDB的mongo shell常用操作方法及操作腳本筆記
mongo shell即相當(dāng)于SQL語句在關(guān)系型數(shù)據(jù)庫中的作用,MongoDB使用JavaScript作為shell操作命令,這里我們就來整理MongoDB的mongo shell常用操作方法及操作腳本筆記2016-07-07
MongoDB副本集丟失數(shù)據(jù)的測試實(shí)例教程
這篇文章主要給大家介紹了關(guān)于MongoDB副本集丟失數(shù)據(jù)的測試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Mongodb 啟動(dòng)命令mongod參數(shù)說明(中文翻譯)
這篇文章主要介紹了Mongodb 啟動(dòng)命令mongod參數(shù)說明(中文翻譯)的相關(guān)資料,需要的朋友可以參考下2016-10-10
開發(fā)分布式醫(yī)療掛號(hào)系統(tǒng)MongoDB集成實(shí)現(xiàn)上傳醫(yī)院接口
這篇文章主要介紹了開發(fā)分布式醫(yī)療掛號(hào)系統(tǒng)MongoDB集成實(shí)現(xiàn)上傳醫(yī)院接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
數(shù)據(jù)庫MongoDB啟動(dòng)的三種方式
MongoDB是一個(gè)流行的分布式文檔型數(shù)據(jù)庫,用于存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),本文給大家總結(jié)了數(shù)據(jù)庫MongoDB啟動(dòng)的三種方式,講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-07-07
MongoDB搭建高可用集群的完整步驟(3個(gè)分片+3個(gè)副本)
這篇文章主要給大家介紹了關(guān)于MongoDB搭建高可用集群(3個(gè)分片+3個(gè)副本)的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

