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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 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<>());
    }


}
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
24天前
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
40 21
|
9天前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
56 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
12天前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
55 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
5天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
21 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
4天前
|
存储 NoSQL MongoDB
数据库数据恢复—MongoDB数据库迁移过程中丢失文件的数据恢复案例
某单位一台MongoDB数据库由于业务需求进行了数据迁移,数据库迁移后提示:“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
27天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
45 17
|
29天前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
103 7
|
29天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
96 6
|
前端开发 Java Spring
Java:SpringBoot实现文件上传
Java:SpringBoot实现文件上传
287 0
|
前端开发 Java Spring
Java:SpringBoot实现文件上传
Java:SpringBoot实现文件上传
145 0

热门文章

最新文章