跳到主要内容

5.5 Map 查询模式

Map 查询模式是构造器 API 的一种用法,使用 Map<String, Object> 作为数据载体。映射 Map 模式 复用实体对象映射,自由 Map 模式 直接使用表名和列名。

适合场景

  • 数据来自动态表单、导入任务、消息体或中间转换结果,天然就是 Map
  • 需要在同一套构造器 API 下完成查询、写入、更新、删除。
  • 已经有对象映射,但业务层不想维护实体对象。
  • 没有实体类或不想维护对象映射,表名、列名来自配置或运行时规则。

不适合场景

两种 Map 模式

模式入口是否需要对象映射字段名如何解释详细说明
映射 Map 模式lambda.query(User.class).asMap()需要Java 属性名,按映射转换为数据库列名映射 Map 模式
自由 Map 模式lambda.queryFreedom("users")不需要表名和列名直接来自字符串自由 Map 模式
模式选择
已有实体映射
|
+-- 需要 Map 作为数据载体
| |
| +-- 使用 asMap()
|
+-- 需要实体对象和方法引用
|
+-- 使用 Entity 模式

没有实体映射
|
+-- 表名、列名由调用者提供
|
+-- 使用 *Freedom()

两种模式都会使用 MapQueryMapInsertMapUpdateMapDelete 这组 API。共同能力包括条件、排序、分组、分页、写入、更新、删除和危险更新保护。

查询和写入入口

操作映射 Map 模式自由 Map 模式
查询lambda.query(User.class).asMap()lambda.queryFreedom("users")
写入lambda.insert(User.class).asMap()lambda.insertFreedom("users")
更新lambda.update(User.class).asMap()lambda.updateFreedom("users")
删除lambda.delete(User.class).asMap()lambda.deleteFreedom("users")

写入、更新、删除的具体差异见 Map 写入、更新和删除

字段来源

字段解释规则
映射 Map 模式
Map key = Java 属性名
loginName -> 对象映射 -> login_name

自由 Map 模式
Map key = 调用者提供的列名
login_name -> SQL 标识符

映射 Map 模式会读取对象映射,因此可以复用列名转换、字段过滤、TypeHandler 和写入策略。自由 Map 模式不读取实体映射,表名和列名由调用者直接提供。

深入阅读