v6.3.0 (2025-12-10)
<dependency>
<groupId>net.hasor</groupId>
<artifactId>jdbc-mongo</artifactId>
<version>6.3.0</version>
</dependency>
影响范围
- LambdaTemplate 接口和 JdbcTemplate 类
- jdbc-mongo 驱动
- jdbc-redis 驱动
更新内容
- 新增
- 新增 jdbc-mongo 驱动,支持使用 JDBC 协议操作 MongoDB。
- 在 Mapper 注解化、Mapper File、JdbcTemplate 级别 API 上适配 jdbc-mongo 驱动。
- 支持使用 LambdaTemplate 进行类型安全的 MongoDB 操作。
- 支持 MongoDB 的常用命令,包括 CRUD、聚合、索引管理等。
- 支持在 Mapper File 中使用 动态 SQL 标签生成 MongoDB 执行命令。
- 支持 ResultSetExtractor、RowMapper 等接口接收 MongoDB 查询结果。
- 调整
- 保证不被乱用 JedisCmd 不在可以被公开创建。
- 使用统一的 CommandBuilder 来替代 LambdaTemplate 中已有的 SQL 构建器。
- SqlDialect 方言接口中新增 newBuilder 方法可以创建与其方言适配的命令构建器。
- 在 MapperFile 和 @Column 中
setColTemplate、groupByColTemplate属性被废弃,这两项参数在使用过程中不具备逻辑性。
- 优化
- JedisConn 在初始化获取版本号时如果发生意外将会打印一个 warn 日志。
- 修复
- AdapterContainer 当操作响应速度早于结果返回时在多线程 模式中操作共享资源的竞争冲突问题,该问题会导致请求卡死在 syncObj 对象的锁获得上。
- DynamicParsed 修复 SQL 中如果冒号
:后面紧跟空白字符的情况出现口导致解析出现 OOM 的问题。
MongoDB 如何使用?
使用 JdbcTemplate 执行命令
// 1. 获取 MongoDB 连接
Connection mongoConn = ...; // 参考文档:驱动适配器 > JDBC Mongo > 安装与配置
JdbcTemplate jdbc = new JdbcTemplate(mongoConn);
// 2. 插入数据
jdbc.execute("test.user_info.insert({name: 'mali', age: 26})");
// 3. 查询数据
List<Map<String, Object>> list = jdbc.queryForList("test.user_info.find({name: 'mali'})");
// 4. 更新数据
jdbc.execute("test.user_info.update({name: 'mali'}, {$set: {age: 27}})");
// 5. 删除数据
jdbc.execute("test.user_info.remove({name: 'mali'})");
使用 Mapper 接口操作
// 1. 定义实体类
@Table("test.user_info")
public class UserInfo {
@Column("uid")
private String uid;
@Column("name")
private String name;
// getters and setters
}
// 2. 定义 Mapper 接口
@SimpleMapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
@Insert("test.user_info.insert(#{user})")
int saveUser(@Param("user") UserInfo user);
@Query("test.user_info.find({uid: #{uid}})")
UserInfo loadUser(@Param("uid") String uid);
}
// 3. 使用 Mapper
try (Session session = config.newSession(mongoConn)) {
UserInfoMapper mapper = session.createMapper(UserInfoMapper.class);
// 保存
UserInfo user = new UserInfo();
user.setUid("1111");
user.setName("mali");
mapper.saveUser(user);
// 查询
UserInfo loaded = mapper.loadUser("1111");
}
使用 LambdaTemplate 操作
// 1. 获取 MongoDB 连接
Connection mongoConn = ...;
LambdaTemplate lambda = new LambdaTemplate(mongoConn);
// 2. 插入数据
UserInfo user = new UserInfo();
user.setUid("1111");
user.setName("mali");
lambda.insert(UserInfo.class).applyEntity(user).executeSumResult();
// 3. 查询数据
UserInfo loaded = lambda.query(UserInfo.class)
.eq(UserInfo::getUid, "1111")
.queryForObject();
// 4. 更新数据
lambda.update(UserInfo.class)
.eq(UserInfo::getUid, "1111")
.updateTo(UserInfo::getName, "dative")
.doUpdate();
// 5. 删除数据
lambda.delete(UserInfo.class)
.eq(UserInfo::getUid, "1111")
.doDelete();