MongoDB - Java连接MongoDB:Spring Boot集成MongoDB的步骤

MongoDB - Java连接MongoDB:Spring Boot集成MongoDB的步骤
在这里插入图片描述
👋 大家好,欢迎来到我的技术博客!
💻 作为一名热爱 Java 与软件开发的程序员,我始终相信:清晰的逻辑 + 持续的积累 = 稳健的成长
📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。
🎯 本文将围绕MongoDB这个话题展开,希望能为你带来一些启发或实用的参考。
🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获!

文章目录

MongoDB - Java连接MongoDB:Spring Boot集成MongoDB的步骤 ☕

在现代企业级应用开发中,数据持久化是构建可靠系统的核心环节。传统的关系型数据库(如 MySQL、Oracle)虽然成熟稳定,但在面对高并发写入、灵活数据结构、快速迭代需求等场景时,往往显得力不从心。

此时,NoSQL 数据库以其模式自由、水平扩展、高性能读写等优势脱颖而出。而在众多 NoSQL 解决方案中,MongoDB 凭借其文档模型(Document Model)、强大的查询语言、成熟的生态系统和云原生支持,成为全球最受欢迎的非关系型数据库之一。

📊 根据 DB-Engines 排名 ✅,MongoDB 长期稳居 NoSQL 数据库榜首。

Java,作为企业级后端开发的“常青树”,凭借其稳定性、跨平台性、丰富的框架生态,依然是构建大型分布式系统的首选语言。当 Java 的稳健 遇上 MongoDB 的灵活,便催生出一种高效、可扩展、面向未来的数据架构组合。

在 Spring 生态中,Spring Boot 通过“约定优于配置”的理念,极大简化了应用搭建流程;而 Spring Data MongoDB 则在此基础上,为 MongoDB 提供了无缝集成、声明式操作、对象映射(ORM) 等高级抽象,让开发者几乎无需编写底层驱动代码,即可完成复杂的数据交互。

💡 Spring Boot + Spring Data MongoDB = 快速构建现代化 Java 应用的黄金搭档!

然而,许多 Java 开发者在初次集成 MongoDB 时,常面临以下困惑:

  • 如何正确配置依赖与连接?
  • 如何将 Java 对象映射为 MongoDB 文档?
  • 如何实现复杂的查询、分页、聚合操作?
  • 事务、索引、性能优化如何处理?

本文将带你从零开始,手把手完成 Spring Boot 与 MongoDB 的深度集成。我们将通过:

  • 详细的项目搭建与配置指南;
  • 完整的实体类、Repository、Service 层代码示例;
  • CRUD 操作、自定义查询、聚合管道、事务管理等核心功能实战;
  • Mermaid 可视化架构图与数据流图
  • 实用的外链资源与生产级最佳实践
  • 对比原生 Java 驱动(MongoDB Driver),理解 Spring Data 的价值。

无论你是刚接触 Spring Boot 的新手,还是希望提升 MongoDB 使用技能的资深工程师,相信这篇万字长文都能为你提供清晰、系统、可落地的知识体系。让我们一起开启这段高效、优雅的 Java + MongoDB 之旅吧!🚀


第一步:环境准备 —— 安装与依赖配置 🛠️

1.1 安装 MongoDB

你可以选择本地安装、Docker 容器,或使用云服务(如 MongoDB Atlas)。为便于学习,我们推荐先在本地运行。

macOS(使用 Homebrew)
brew tap mongodb/brew brew install [email protected] brew services start mongodb-community 
Windows / Linux

前往 MongoDB 官方下载中心
选择对应操作系统版本并安装。

启动服务(默认端口 27017):

mongod 

验证安装:

mongosh --eval "db.runCommand({ping: 1})"

应返回 { ok: 1 }

🔒 安全提示:生产环境务必启用认证(--auth),本地开发可暂不配置。

1.2 创建 Spring Boot 项目

访问 Spring Initializr
这是官方推荐的 Spring Boot 项目生成器。

配置如下:

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 3.3.x(最新稳定版)
  • Group: com.example
  • Artifact: mongodb-demo
  • Dependencies:
    • Spring Web
    • Spring Data MongoDB

点击 Generate 下载 ZIP 文件,解压后导入 IDE(如 IntelliJ IDEA 或 Eclipse)。

📌 注意:Spring Boot 3.x 要求 Java 17+,请确保 JDK 版本符合要求。

1.3 添加必要依赖(Maven)

打开 pom.xml,确认已包含以下依赖:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Data MongoDB --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!-- Lombok(可选,简化 getter/setter) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>
Lombok 能显著减少样板代码,建议启用(IDE 需安装插件)。

第二步:配置 MongoDB 连接 —— application.properties 🌐

Spring Boot 通过 application.properties(或 application.yml)管理配置。

2.1 基本连接配置

编辑 src/main/resources/application.properties

# MongoDB 连接 URI(本地) spring.data.mongodb.uri=mongodb://localhost:27017/my_app_db # 或使用独立配置项(等效) # spring.data.mongodb.host=localhost # spring.data.mongodb.port=27017 # spring.data.mongodb.database=my_app_db 
💡 推荐使用 uri 方式,更简洁且支持认证、副本集等高级选项。

2.2 连接 MongoDB Atlas(云服务)

若使用 MongoDB Atlas ✅(官方云数据库),配置如下:

spring.data.mongodb.uri=mongodb+srv://<username>:<password>@cluster0.xxxxx.mongodb.net/my_app_db?retryWrites=true&w=majority 
🔐 安全建议:将用户名密码存入环境变量或配置中心,避免硬编码:

2.3 连接测试

创建一个简单的 REST 控制器验证连接:

@RestControllerpublicclassHealthController{@AutowiredprivateMongoTemplate mongoTemplate;@GetMapping("/health")publicStringhealthCheck(){try{ mongoTemplate.getDb().runCommand(newDocument("ping",1));return"✅ MongoDB 连接成功!";}catch(Exception e){return"❌ 连接失败: "+ e.getMessage();}}}

启动应用后访问 http://localhost:8080/health,应看到成功提示。

🌐 外链参考Spring Boot MongoDB 配置文档

第三步:数据建模 —— 实体类与注解 🧱

在 MongoDB 中,数据以 BSON(Binary JSON) 文档形式存储。Spring Data MongoDB 通过 实体类(Entity) 与文档进行映射。

3.1 创建用户实体类

packagecom.example.mongodbdemo.model;importlombok.Data;importorg.springframework.data.annotation.Id;importorg.springframework.data.mongodb.core.mapping.Document;importorg.springframework.data.mongodb.core.mapping.Field;importjava.time.LocalDateTime;importjava.util.List;@Data// Lombok 自动生成 getter/setter/toString@Document(collection ="users")// 指定集合名publicclassUser{@Id// 主键,对应 MongoDB 的 _id 字段privateString id;@Field("name")// 可省略,字段名与属性名一致privateString name;@Field("email")privateString email;privateInteger age;privateList<String> tags;@Field("created_at")privateLocalDateTime createdAt;}
📌 关键注解说明:@Document:标记为 MongoDB 文档,collection 指定集合名;@Id:标识主键,类型通常为 String(对应 ObjectId 字符串);@Field:指定 BSON 字段名(若与 Java 属性名不同);LocalDateTime 会被自动序列化为 ISODate。

3.2 自定义 ID 生成策略(可选)

默认情况下,Spring Data 会在保存时自动生成 ObjectId 并转为字符串。你也可以手动控制:

@IdprivateObjectId objectId;// 使用 ObjectId 类型// 或@Id@GeneratedValue// 需配合自定义策略privateString id;

但一般推荐使用 String id,更符合 Java 习惯。


第四步:数据访问层 —— Repository 接口 💾

Spring Data MongoDB 的核心是 Repository 模式。你只需定义接口,Spring 会自动实现常用方法。

4.1 基础 Repository

packagecom.example.mongodbdemo.repository;importcom.example.mongodbdemo.model.User;importorg.springframework.data.mongodb.repository.MongoRepository;importorg.springframework.stereotype.Repository;@RepositorypublicinterfaceUserRepositoryextendsMongoRepository<User,String>{// 继承 MongoRepository<T, ID>,T=实体类,ID=主键类型}
✅ 仅此一行代码,你就获得了以下能力:save(), saveAll():保存findById(), findAll():查询deleteById(), deleteAll():删除existsById():存在性检查

4.2 自定义查询方法

Spring Data 支持通过方法命名约定自动生成查询:

publicinterfaceUserRepositoryextendsMongoRepository<User,String>{// 根据 email 精确查询UserfindByEmail(String email);// 根据 age 大于等于查询List<User>findByAgeGreaterThanEqual(Integer minAge);// 根据 tags 包含某值查询List<User>findByTagsContaining(String tag);// 组合条件:age >= ? AND tags 包含 ?List<User>findByAgeGreaterThanEqualAndTagsContaining(Integer minAge,String tag);}
🔍 方法命名规则findBy... / getBy... / readBy...属性名首字母大写(emailEmail)支持 And, Or, Between, Like, In, IsNull 等关键词

4.3 使用 @Query 注解执行原生查询

对于复杂查询,可直接写 MongoDB 查询语句:

importorg.springframework.data.mongodb.repository.Query;publicinterfaceUserRepositoryextendsMongoRepository<User,String>{@Query("{ 'age' : { $gte: ?0 }, 'tags' : { $in: [?1] } }")List<User>findUsersByAgeAndTag(int minAge,String tag);@Query(value ="{ 'name' : { $regex: ?0, $options: 'i' } }", fields ="{ 'name': 1, 'email': 1 }")List<User>findUsersByNameRegex(String pattern);}
📌 ?0, ?1 是参数占位符;fields 用于投影(只返回指定字段)。

第五步:业务逻辑层 —— Service 与 CRUD 实战 🛠️

我们将实现完整的用户管理功能。

5.1 UserService 接口

packagecom.example.mongodbdemo.service;importcom.example.mongodbdemo.model.User;importjava.util.List;importjava.util.Optional;publicinterfaceUserService{UsercreateUser(User user);Optional<User>getUserById(String id);List<User>getAllUsers();UserupdateUser(String id,User user);voiddeleteUser(String id);List<User>getUsersByMinAge(Integer minAge);}

5.2 UserService 实现类

packagecom.example.mongodbdemo.service;importcom.example.mongodbdemo.model.User;importcom.example.mongodbdemo.repository.UserRepository;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.time.LocalDateTime;importjava.util.List;importjava.util.Optional;@ServicepublicclassUserServiceImplimplementsUserService{@AutowiredprivateUserRepository userRepository;@OverridepublicUsercreateUser(User user){ user.setCreatedAt(LocalDateTime.now());return userRepository.save(user);}@OverridepublicOptional<User>getUserById(String id){return userRepository.findById(id);}@OverridepublicList<User>getAllUsers(){return userRepository.findAll();}@OverridepublicUserupdateUser(String id,User updatedUser){Optional<User> existingUserOpt = userRepository.findById(id);if(existingUserOpt.isPresent()){User existingUser = existingUserOpt.get(); existingUser.setName(updatedUser.getName()); existingUser.setEmail(updatedUser.getEmail()); existingUser.setAge(updatedUser.getAge()); existingUser.setTags(updatedUser.getTags());return userRepository.save(existingUser);}else{thrownewRuntimeException("用户不存在,ID: "+ id);}}@OverridepublicvoiddeleteUser(String id){if(!userRepository.existsById(id)){thrownewRuntimeException("用户不存在,无法删除");} userRepository.deleteById(id);}@OverridepublicList<User>getUsersByMinAge(Integer minAge){return userRepository.findByAgeGreaterThanEqual(minAge);}}
⚠️ 注意save() 方法既可用于插入(insert),也可用于更新(update),取决于 _id 是否已存在。

5.3 REST Controller 暴露 API

packagecom.example.mongodbdemo.controller;importcom.example.mongodbdemo.model.User;importcom.example.mongodbdemo.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController@RequestMapping("/api/users")publicclassUserController{@AutowiredprivateUserService userService;@PostMappingpublicResponseEntity<User>createUser(@RequestBodyUser user){User savedUser = userService.createUser(user);returnnewResponseEntity<>(savedUser,HttpStatus.CREATED);}@GetMapping("/{id}")publicResponseEntity<User>getUserById(@PathVariableString id){return userService.getUserById(id).map(user ->ResponseEntity.ok(user)).orElse(ResponseEntity.notFound().build());}@GetMappingpublicResponseEntity<List<User>>getAllUsers(){returnResponseEntity.ok(userService.getAllUsers());}@PutMapping("/{id}")publicResponseEntity<User>updateUser(@PathVariableString id,@RequestBodyUser user){try{User updated = userService.updateUser(id, user);returnResponseEntity.ok(updated);}catch(RuntimeException e){returnResponseEntity.notFound().build();}}@DeleteMapping("/{id}")publicResponseEntity<Void>deleteUser(@PathVariableString id){try{ userService.deleteUser(id);returnResponseEntity.noContent().build();}catch(RuntimeException e){returnResponseEntity.notFound().build();}}@GetMapping("/age/{minAge}")publicResponseEntity<List<User>>getUsersByMinAge(@PathVariableInteger minAge){returnResponseEntity.ok(userService.getUsersByMinAge(minAge));}}
🧪 测试示例(使用 curl):

第六步:高级特性 —— 聚合、事务与索引 🚀

6.1 聚合管道(Aggregation Pipeline)

使用 MongoTemplate 执行复杂聚合:

@AutowiredprivateMongoTemplate mongoTemplate;publicList<UserStats>getUserStatsByTag(){TypedAggregation<User> agg =Aggregation.newAggregation(User.class,Aggregation.unwind("tags"),Aggregation.group("tags").avg("age").as("avgAge").count().as("userCount"),Aggregation.sort(Sort.Direction.DESC,"avgAge"));return mongoTemplate.aggregate(agg,UserStats.class).getMappedResults();}// 结果类@DatapublicstaticclassUserStats{privateString _id;// group keyprivateDouble avgAge;privateLong userCount;}
📌 Aggregation 提供类型安全的构建方式,避免手写 JSON。

6.2 事务支持(Transactions)

MongoDB 4.0+ 支持多文档 ACID 事务(需副本集)。

@ServicepublicclassTransferService{@AutowiredprivateMongoTemplate mongoTemplate;@TransactionalpublicvoidtransferPoints(String fromUserId,String toUserId,int points){Query fromQuery =Query.query(Criteria.where("_id").is(fromUserId));Update fromUpdate =newUpdate().inc("points",-points); mongoTemplate.updateFirst(fromQuery, fromUpdate,User.class);Query toQuery =Query.query(Criteria.where("_id").is(toUserId));Update toUpdate =newUpdate().inc("points", points); mongoTemplate.updateFirst(toQuery, toUpdate,User.class);}}
⚠️ 前提:启用 @EnableMongoRepositories(considerNestedRepositories = true)使用 ReactiveMongoTemplate 或确保驱动版本兼容本地单机需模拟副本集(开发环境可用 --replSet 启动)

6.3 索引管理

在实体类上声明索引:

@Document(collection ="users")@CompoundIndexes({@CompoundIndex(name ="email_unique", def ="{'email': 1}", unique =true),@CompoundIndex(name ="age_name_idx", def ="{'age': 1, 'name': -1}")})publicclassUser{// ...}

或通过 MongoTemplate 动态创建:

mongoTemplate.indexOps(User.class).ensureIndex(newIndex().on("email",Sort.Direction.ASC).unique());
最佳实践:为高频查询字段建索引,避免全表扫描。

第七步:架构与数据流可视化 —— Mermaid 图表 📊

7.1 系统架构图

HTTP RequestBSON DocumentsClient Browser / PostmanSpring Boot ApplicationUserControllerUserServiceUserRepositorySpring Data MongoDBMongoDB Serverusers Collection

7.2 数据操作流程图

ClientControllerServiceRepositoryMongoDBPOST /api/users {name: "李四", ...}createUser(user)save(user)Insert Document返回 inserted_id返回 User 对象返回 UserHTTP 201 + JSONGET /api/users/123getUserById("123")findById("123")Find by _id返回 Document返回 Optional<User>返回 UserHTTP 200 + JSONClientControllerServiceRepositoryMongoDB

这些图表清晰展示了 Spring Data MongoDB 如何屏蔽底层细节,提供高层抽象。

第八步:错误处理与最佳实践 🛡️

8.1 常见异常处理

@ControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(RuntimeException.class)publicResponseEntity<String>handleRuntime(RuntimeException e){returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器错误: "+ e.getMessage());}@ExceptionHandler(Exception.class)publicResponseEntity<String>handleGeneral(Exception e){returnResponseEntity.status(HttpStatus.BAD_REQUEST).body("请求错误: "+ e.getMessage());}}

8.2 关键最佳实践

  1. 监控与日志
    • 集成 Micrometer + Prometheus 监控指标。

启用 MongoDB 驱动日志:

logging.level.org.springframework.data.mongodb.core=DEBUG 

数据校验

publicclassUser{@NotBlankprivateString name;@EmailprivateString email;}// Controller 中publicResponseEntity<User>createUser(@Valid@RequestBodyUser user){...}

连接池配置

spring.data.mongodb.option.max-pool-size=50 spring.data.mongodb.option.min-pool-size=10 

分页查询

Pageable pageable =PageRequest.of(0,10,Sort.by("createdAt").descending());Page<User> page = userRepository.findAll(pageable);

使用 DTO 而非直接暴露 Entity

// 避免直接返回 User 实体publicclassUserResponse{privateString id;privateString name;privateString email;// 不包含敏感字段如 password}

第九步:对比原生 MongoDB Driver 🆚

Spring Data MongoDB 底层仍使用官方 Java Driver。了解差异有助于深入理解。

9.1 原生 Driver 示例

// 原生方式MongoClient client =MongoClients.create("mongodb://localhost:27017");MongoDatabase db = client.getDatabase("my_app_db");MongoCollection<Document> collection = db.getCollection("users");Document user =newDocument("name","王五").append("email","[email protected]").append("age",28); collection.insertOne(user);

9.2 Spring Data 的优势

特性原生 DriverSpring Data MongoDB
对象映射需手动转换 Document ↔ POJO自动映射(@Document)
CRUD 操作手写查询语句Repository 接口自动生成
查询构建字符串拼接易错方法命名 / @Query 类型安全
事务需手动管理 Session@Transactional 声明式
集成 Spring需自行管理 Bean无缝集成 IoC/AOP
💡 结论:除非有极致性能需求或特殊场景,否则强烈推荐使用 Spring Data MongoDB
🌐 外链参考MongoDB Java Driver 官方文档

第十步:部署到生产环境 —— 安全与性能优化 ☁️

10.1 使用 MongoDB Atlas

  1. 注册 MongoDB Atlas
  2. 创建免费集群(M0 Sandbox)
  3. 添加数据库用户和 IP 白名单
  4. 获取连接字符串,替换 application.properties

10.2 安全加固

  • 启用认证:生产环境必须设置用户名密码;
  • 使用 TLS/SSL:连接串添加 ?ssl=true
  • 最小权限原则:数据库用户仅授予必要权限;
  • 敏感信息加密:使用 Spring Cloud Config 或 Vault。

10.3 性能调优

  • 合理设计文档结构:避免深度嵌套,利用数组而非关联;
  • 建立有效索引:使用 explain() 分析慢查询;
  • 批量操作insertMany() 优于多次 insertOne()
  • 连接池调优:根据并发量调整 maxPoolSize
🌐 外链参考MongoDB 性能最佳实践

总结:构建高效、可靠的 Java + MongoDB 应用 🏁

通过本文,我们系统地完成了 Spring Boot 与 MongoDB 的集成全过程:

  • ✅ 从环境搭建、依赖配置到连接测试;
  • ✅ 实体建模、Repository 定义、Service 实现;
  • ✅ REST API 暴露与 CRUD 全流程;
  • ✅ 聚合、事务、索引等高级特性;
  • ✅ 错误处理、安全加固、生产部署最佳实践;
  • ✅ 与原生 Driver 的对比分析。

Spring Data MongoDB 极大地提升了开发效率,同时保留了对 MongoDB 强大功能的完整访问能力。它让你专注于业务逻辑,而非数据访问的繁琐细节。

🌟 记住:技术的价值在于解决实际问题。动手实践,才是掌握技能的唯一路径。

现在,打开你的 IDE,创建你的第一个 Spring Boot + MongoDB 项目吧!用代码改变世界,从存储一条用户记录开始。💡


附录:优质外链资源


🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk