java开发实战(3):springboot整合mongo数据库(mongodb-driver)

简介: java开发实战(3):springboot多模块工程整合mongo数据库(mongodb-driver)

接上一篇文章;

springboot连接mongo数据库有多种方式:例如

MongoTemplate 使用springboot的模板方法
mongodb-driver 使用数据库驱动操作数据库
  • 使用MongoTemolate需要引入的依赖:

在pom文件中添加

   <dependency> 
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <version>2.0.0.RELEASE</version>
   </dependency>

在数据库操作类中引入:

@Autowired
private MongoTemplate mongoTemplate;

即可;

  • 使用mongodb-driver-sync

相对于mongoTemplate,使用数据库驱动连接数据库,可以进行很多底层操作,且目前其性能也不输mongoTemplate; 此次使用这个方法整合数据库;

  • 在demo-common中的pom文件中引入依赖:
  <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.6.0</version>
        </dependency>
  • 配置文件中配置数据库地址:

application.properties中配置

demo.mongodb.uri = mongodb://127.0.0.1:27017/demo
  • 实例化连接客户端:
public class demoMongoClient implements InitializingBean {

    private final String mongodbUriString;

    private MongoClient mongoClient;

    private MongoDatabase database;

    public demoMongoClient(String mongodbUriString) {
        this.mongodbUriString = mongodbUriString;
    }

    public MongoClient getMongoClient() {
        return this.mongoClient;
    }

    public MongoDatabase getDatabase() {
        return this.database;
    }
  
    @Override
    public void afterPropertiesSet() {
        CodecRegistry codecRegistry = CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
                CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
        String dbName;
        Builder builder;
        if (StringUtils.hasLength(this.mongodbUriString)) {
           
            ConnectionString connStr = new ConnectionString(this.mongodbUriString);
            dbName = connStr.getDatabase();
            this.mongodbUriString);
            builder = MongoClientSettings.builder().codecRegistry(codecRegistry).applyConnectionString(connStr);
        } else {
            throw new IllegalArgumentException();
        }

        this.mongoClient = MongoClients.create(builder.build());

        this.database = this.mongoClient.getDatabase(Objects.requireNonNull(dbName));
    }
  • 创建抽象类,抽取公共操作
public abstract class AbstractDAO<T> {
 
 public T get(String id, List<String> fields) {
        if (CollectionUtils.isEmpty(fields)) {
            return this.collection.find(Filters.eq(id)).first();
        } else {
            return this.collection.find(Filters.eq(id)).projection(Projections.include(fields)).first();
        }
    }

  
    public DeleteResult delete(String id) {
        return this.collection.deleteOne(Filters.eq(id));
    }


    public void insert(T doc) {
        this.collection.insertOne(doc);
    }


    public boolean exists(String id) {
        return this.collection.countDocuments(Filters.eq(id)) > 0;
    }
    public T updateAndGet(Object id, Bson update, List<String> fields) {
        FindOneAndUpdateOptions options = new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER);
        if (!CollectionUtils.isEmpty(fields)) {
            options.projection(Projections.include(fields));
        }
        return this.collection.findOneAndUpdate(eq(id), update, options);
    }

    public UpdateResult update(Object id, @NonNull Bson update) {
        return this.collection.updateOne(eq(id), update);
    }

 
    public List<T> find(Bson filter, List<String> fields) {
        FindIterable<T> iterable = this.collection.find((filter == null ? new Document() : filter));
        if (!CollectionUtils.isEmpty(fields)) {
            iterable.projection(Projections.include(fields));
        }
        return iterable.into(new ArrayList<>());
    }


}
相关文章
|
8月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
8月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
8月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
849 79
|
6月前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
310 1
|
8月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
358 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
10月前
|
存储 缓存 自然语言处理
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
318 8
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
|
8月前
|
存储 SQL 前端开发
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
本节以“账本”为例,使用关系型数据库接口实现账单的增、删、改、查操作。通过创建ArkTSRdb应用,演示如何操作RdbStore进行数据管理,并结合界面按钮实现交互功能。
398 0
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
|
7月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。
|
10月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
792 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发

推荐镜像

更多