当前位置: 代码网 > it编程>数据库>Nosql > 如何去掉保存mongodb数据时出现的_class字段

如何去掉保存mongodb数据时出现的_class字段

2024年05月15日 Nosql 我要评论
配置如下:application.yml文件内容如下spring: data: mongodb: host: 192.168.9.234 #指定mongodb服务地址 po

配置如下:

application.yml文件内容如下

spring:
  data:
    mongodb:
      host: 192.168.9.234 #指定mongodb服务地址
      port: 27017 #指定端口,默认就为27017
      database: blog #指定使用的数据库(集合)
      authentication-database: admin # 登录认证的逻辑库名
      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> {
    /**
     * 查询数据
     *
     * @param query
     * @return
     */

    list<t> find(query query);

    /**
     * 分页查询
     *
     * @param query
     * @param start
     * @param size
     * @return
     */
    list<t> findlist(query query, int start, int size);


    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    t findone(string id);

    /**
     * 插入一条数据
     *
     * @param entity
     */
    void insert(t entity);

    /**
     * 更新数据
     *
     * @param query
     * @param update
     * @return
     */
    updateresult update(query query, update update);

    /**
     * 根据实体类删除数据
     *
     * @param entity
     * @return
     */
    deleteresult delete(t entity);


    /**
     * 根据query删除数据
     *
     * @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();
}

其实现类basicdao内容如下

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;
    }
}

实体类(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 + '\'' +
                '}';
    }
}

服务实现类(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();
    }
}

成功插入数据后

发现多了个_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);
    }
}

结果如下

失败案例:

新建配置类(在实际项目引入时可能会报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数据时出现的_class字段的详细内容,更多关于mongodb出现_class字段的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com