raven-mongodb 3.2.1 发布:全面支持 JDK 17+、Spring Boot 3.5+
raven-mongodb 3.2.1 正式发布:全面支持 JDK 17+ 和 Spring Boot 3.5+
项目简介
raven-mongodb 是一个基于 MongoDB Driver 的增强封装库,为 Java 开发者提供类似 ORM 的优雅开发体验,同时保持 MongoDB 的灵活性。该项目已在多个生产环境中稳定运行,致力于简化 MongoDB 操作、提升开发效率、避免常见数据问题。
版本亮点
🎯 全面拥抱现代 Java 生态
- ✅ JDK 17+ 支持:充分利用现代 Java 特性,提供更好的性能和开发体验
- ✅ Spring Boot 3.5+ 兼容:无缝集成最新 Spring Boot 版本
- ✅ 生产级稳定性:经过多个项目验证,可靠性有保障
核心特性
1️⃣ 数据库级自增 ID
告别手动管理 ID 的烦恼,raven-mongodb 提供基于数据库实现的自增 ID 机制:
@FieldNameConstants
@Getter
@Setter
public class Orders implements AutoIncr<Long> {
@BsonId
private Long id; // 自动生成,无需手动赋值
private String name;
private BigDecimal price;
}
批量插入 ID 自动填充!
List<Orders> orders = Arrays.asList(
new Orders("商品A", new BigDecimal("99.00")),
new Orders("商品B", new BigDecimal("199.00"))
);
ordersRepository.insertBatch(orders);
// 插入后,每个 order 的 id 都已自动填充
2️⃣ 优雅的链式查询
摆脱繁琐的 Bson 构建,使用流畅的 Lambda 表达式:
// 简单查询
Orders order = ordersRepository.findOne(
f -> f.eq(Fields.status, Status.Normal)
.gt(Fields.price, 9.0)
);
// 复杂条件组合
List<Orders> orders = ordersRepository.findMany(
FindOptions.Builder.create(Orders.class)
.filter(f -> f
.eq(Fields.status, Status.Normal)
.gt(Fields.price, 9.0)
)
.sort(s -> s.asc(Fields.itemsId))
.projection(p -> p
.include(Fields.name, Fields.itemsId)
.excludeId()
)
.skip(3)
.limit(10)
.build()
);
3️⃣ 条件动态拼接
使用 condition() 方法优雅处理动态查询条件:
List<Long> uids = getUserIds(); // 可能为 null
List<Orders> orders = ordersRepository.findMany(f -> f
.eq(Fields.status, Status.Finish)
.condition(uids != null && !uids.isEmpty(), x -> x.in(Fields.uid, uids))
);
4️⃣ 防止数据覆盖
raven-mongodb 的更新机制只更新指定字段,避免因实体版本不一致导致的数据覆盖问题:
// 只更新 status 字段,其他字段不受影响
ordersRepository.updateOne(
f -> f.eq(Fields.id, 1L),
u -> u.set(Fields.status, Status.Paid)
);
5️⃣ 强大的实体拦截器
通过 EntityInterceptor 在数据操作的关键节点注入自定义逻辑:
多租户数据隔离示例:
public class TenantInterceptor implements EntityInterceptor {
@Override
public void preFind(BaseFindOptions<?> options,
EntityInformation<?, ?> entityInformation) {
Long tenantId = TenantUtils.getTenantId();
if (tenantId != null) {
Bson filter = Filters.eq("tenantId", tenantId);
options.filter(BsonUtils.combine(options.filter(), filter));
}
}
}
@EntityListeners({TenantInterceptor.class})
public class User implements AutoIncr<Long> {
@BsonId
private Long id;
private String name;
private Long tenantId;
}
适用场景:
- 🔒 多租户数据隔离
- 🗑️ 逻辑删除自动过滤
- 📝 审计日志记录
- 🔄 数据版本控制
6️⃣ 响应式编程支持
提供完整的 Reactive API,返回 Mono 和 Flux:
ReactiveMongoRepository<User, Long> repos = new UserReactiveRepositoryImpl();
repos.findOne(Filters.gte("_id", 1))
.subscribe(user -> {
System.out.println("user.name: " + user.get().getName());
});
repos.findMany(Filters.empty(), null, Sorts.descending("_id"), 10, 0)
.subscribe(list -> {
System.out.println("查询到 " + list.size() + " 条记录");
});
7️⃣ 枚举类型支持
自动处理枚举与数据库值的转换,支持字符串和数值类型。
快速开始
1. 添加依赖
<dependency>
<groupId>io.github.raven-source</groupId>
<artifactId>raven-mongodb-spring-boot-starter</artifactId>
<version>3.2.1</version>
</dependency>
2. 配置连接
mongodb.options.connString=mongodb://127.0.0.1:27017/?
mongodb.options.dbName=TestDB
3. 定义实体和 Repository
@Repository
public interface OrdersRepository extends MongoRepository<Orders, Long> {
}
@SpringBootApplication
@EnableMongoRepositories(basePackages = "com.example.repository")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4. 开始使用
@Autowired
private OrdersRepository ordersRepository;
public void example() {
// 插入
Orders order = new Orders();
order.setName("测试订单");
order.setPrice(new BigDecimal("99.99"));
ordersRepository.insert(order);
System.out.println("生成的ID: " + order.getId());
// 查询
Orders found = ordersRepository.findOne(order.getId());
// 更新
ordersRepository.updateOne(
f -> f.eq(Fields.id, order.getId()),
u -> u.set(Fields.status, Status.Paid)
);
// 删除
ordersRepository.deleteOne(order.getId());
}
为什么选择 raven-mongodb?
| 特性 | 原生 Driver | raven-mongodb |
|---|---|---|
| 代码简洁度 | ★★☆☆☆ | ★★★★★ |
| 类型安全 | ★★☆☆☆ | ★★★★★ |
| 自增 ID | ✗ | ✓ |
| 防数据覆盖 | ✗ | ✓ |
| 链式查询 | ✗ | ✓ |
| 实体拦截器 | ✗ | ✓ |
| Reactive 支持 | ★★★☆☆ | ★★★★★ |
项目信息
- Maven 坐标:
io.github.raven-source:raven-mongodb-spring-boot-starter:3.2.1 - 开源协议: Apache License 2.0
- GitHub: raven-mongodb-java
- 安全认证:
总结
raven-mongodb 3.2.1 版本全面支持 JDK 17+ 和 Spring Boot 3.5+,为现代 Java 应用提供了一个强大、优雅、生产级的 MongoDB 数据访问解决方案。无论是新项目还是老项目升级,raven-mongodb 都能帮助您:
- 📉 减少 50% 以上的样板代码
- 🛡️ 避免常见的数据覆盖问题
- 🚀 提升开发效率和代码可维护性
- 💪 提供企业级的多租户、审计等能力
立即体验,让 MongoDB 开发更简单!