查询操作
dbVisitor 将 MongoDB 命令作为可执行语句:queryForList 读取结果,? 和 #{...} 仍用于绑定参数,不需要改写为 SQL。 连接配置见 JDBC MongoDB.
实体映射
@Table(value = "user_info", catalog = "test")
public class UserInfo {
@Column(primary = true)
private String uid;
private String name;
// 省略 getter 和 setter
}
uid 是示例业务字段。primary=true 不会创建唯一索引;按 uid 更新、删除会影响所有匹配文档。需要使用 MongoDB 的 _id 时,见主键生成。
执行查询命令
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
List<UserInfo> rows = jdbc.queryForList(
"test.user_info.find({uid: ?})",
new Object[] { "1001" }, UserInfo.class);
通过不同 API 查询
- 构造器 API
- 方法注解
- Mapper 文件
LambdaTemplate lambda = new LambdaTemplate(dataSource);
UserInfo item = lambda.query(UserInfo.class)
.eq(UserInfo::getUid, "1001")
.queryForObject();
普通条件查询生成 MongoDB find 命令。
@SimpleMapper
public interface UserInfoMapper {
@Query("test.user_info.find({uid: #{uid}})")
UserInfo findById(@Param("uid") String uid);
}
Session session = new Configuration().newSession(dataSource);
UserInfoMapper mapper = session.createMapper(UserInfoMapper.class);
UserInfo item = mapper.findById("1001");
<mapper namespace="com.example.UserInfoMapper">
<select id="findById" resultType="com.example.UserInfo">
test.user_info.find({uid: #{uid}})
</select>
</mapper>
@RefMapper("/mapper/mongo-user.xml")
public interface UserInfoMapper {
UserInfo findById(@Param("uid") String uid);
}
XML 保存到 @RefMapper 指定的资源路径;示例类位于 com.example 包。通过 Session 创建 Mapper,方式与方法注解相同。
复杂条件使用命令
需要组合条件时,直接绑定 MongoDB 条件:
List<Map<String, Object>> rows = jdbc.queryForList(
"test.user_info.find({$or: [{name: ?}, {uid: ?}]})",
new Object[] { "mali", "1001" });