跳到主要内容

v6.3.0 (2025-12-10)

<dependency>
<groupId>net.hasor</groupId>
<artifactId>jdbc-mongo</artifactId>
<version>6.3.0</version>
</dependency>

影响范围

更新内容

  • 新增
  • 调整
    • 保证不被乱用 JedisCmd 不在可以被公开创建。
    • 使用统一的 CommandBuilder 来替代 LambdaTemplate 中已有的 SQL 构建器。
    • SqlDialect 方言接口中新增 newBuilder 方法可以创建与其方言适配的命令构建器。
    • 在 MapperFile 和 @Column 中 setColTemplategroupByColTemplate 属性被废弃,这两项参数在使用过程中不具备逻辑性。
  • 优化
    • 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();