快速检索
说明
本文会略过 API 概述部分并以更加直观的形式按照使用场景对手册做分类检索。
增、删、改
- 使用原始 SQL 语句。
- 使用注解 @Insert、@Delete、@Update。
- 使用查询构造器 新增、删除、更新 数据。
- 使用 通用 Mapper 接口。
- 在 Mapper File 中使用 <insert> 标签新增数据。
- 在 Mapper File 中通过 <selectKey> 标签在插入数据时处理数据库自增 ID。
- 在 Mapper File 中使用 <update>、<delete> 标签更新或删除数据。
基础查询
- 使用 SQL 语句 查询一行、查询单个值、查询值列表。
- 执行语句块并 接收多个结果集。
- 通过 @Query 在接口上定义查询。
- 使用构造器 查询单个对象、查询列表、查询总数。
- 使用构造器进行 分组查询、查询排序。
- 在 Mapper File 中使用 <select> 标签查询数据、使用 <sql> 标签定义 SQL 片段。
参数传递
- 在动态 SQL 中利用 SQL 注入 进行参数传递(需要自行评估 SQL 注入安全风险)
- 使用 位置编号 进行参数传递,还可以通过 位置编号名称化 传递参数。
- 使用 名称化 方式参数传递,使用 OGNL 对名称参数进一步取值。
- 使用 SqlArgSource 接口 或 PreparedStatement 接口 传参。
- 通过 规则 在 SQL 语句中实现参数动态化。
分页查询
- 查询构造器中使用 分页查询。
- 在 Mapper 接口中 @Query 注解方法通过增加分页参数实现 分页查询。
- 在 通用 Mapper 中进行分页查询。
- 利用 Session 对象的 queryStatement、pageStatement 重载方法进行分页查询。
- Mapper 接口在和 Mapper XML 文件建立关系后通过 分页对象 进行分页查询。
动态 SQL
- 在 SQL 语句中通过 MACRO 规则 注入预先定义的 SQL 片段(需要自行评估 SQL 注入安全风险)
- 在 SQL 语句中通过 IFTEXT 规则 或
${...}
语法实现 SQL 注入(需要自行评估 SQL 注入安全风险) - 通过 AND、OR、SET 规则增强 SQL 语句。
- 利用 IN 规则,可以自动根据集合参数的数量为 SQL 语句中生成对应的
(?,?,?,?)
。 - 利用 IFAND、IFOR、IFSET、IFIN 规则,允许通过一个条件参数来控制规则是否有效。
- 规则还可以处理 一段 SQL 而不仅仅是一个参数。
- 在 Mapper File 中使用 <if>、<choose>、<when>、<otherwise> 标签进行条件判断。
- 在 Mapper File 中使用 <trim>、<where>、<set> 标签增强特定 SQL 语句的生成。
- 在 Mapper File 中使用 <foreach> 标签处理循环需求。
对象映射
- 使用 @Table 和 @Column 注解进行对象映射。
- 使用 驼峰命名法 将属性自动映射到列上。
- 掌握当遇到 名称大小写敏感、列名为关键字 时的映射技巧,可以帮您处理一些特殊问题。
- 通过映射时的 写入策略 可以控制在新增/修改数据时列是否参与到其中。
- 通过映射时的 写入策略 可以控制在新增/修改数据时列是否参与到其中。
- 通过指定 @Column 注解的 keyType 属性可以设定不同的 主键生成器 策略。
- 在 Mapper File 中使用 <entity> 标签以 XML 方式描述对象映射可以避免代码的侵入。
- 在 Mapper File 中使用 <resultMap> 和 <entity> 两个标签很接近,但不同的是它只能处理查询结果的映射。
- 在 Mapper File 中使用利用 自动映射 机制可以极大的简化配置。
- 在使用构造器进行数据库操作时 语句模版 可以决定生成的 SQL 的语句元素内容。
存储过程
执行 SQL
- SQL 语句的 批量化。
- 加载一个 SQL 脚本 文件。
- 通过 @Execute 注释执行任何类型的语句。
- 在 Mapper File 中使用 <select> 标签 执行任意的 SQL 语句。
接收结果
- 在不同的 API 上使用 List/Map 接收查询结果数据。
- 在不同的 API 上使用 RowMapper 处理每一行结果集的映射。
- 通过 ColumnMapRowMapper 将行转换为 Map,最终返回 List/Map 结构数据。
- 通过 SingleColumnRowMapper 接收查询结果中只有一列的结果集,并将其转换为 List。
- 通过 BeanMappingRowMapper 基于对象映射处理行数据,并将每一行数据都转换为 Bean。
- 通过 MapMappingRowMapper 基于对象映射处理行数据,并将每一行数据都转换为 Map。
- 在不同的 API 上使用 ResultSetExtractor 自定义 ResultSet 结果集的处理。
- dbVisitor 内置了 8 种 不同的 ResultSetExtractor 实现 事实上很多内部逻辑也都用到了它们。
- 在不同的 API 上使用 RowCallbackHandler 处理查询结果的每一条记录,而非获取它们。
- 利用 RowCallbackHandler 实现 MySQL 流式读取超大表。
类型处理
- 在 SQL 语句的参数中通过 typeHandler 选项 指定类型处理器。
- 在对象映射中通过 @Column 注解的 typeHandler 选项 处理类型,如:抽象类型、枚举类型、JSON 序列化。
- dbVisitor 提供了大量实用的类型处理器,当遇到类型问题可以先看下已有类型处理器是否已经支持。
- 枚举可以通过实现 EnumOfValue 或者 EnumOfCode 接口将数据库中的 数值 或 特定 Code 作为和枚举的映射关系。
- 使用 序列化处理器 可以自动识别您依赖中的 Fastjso2、Fastjson、Jackson、Gson 库,并按照这个顺序自动选择它们。
- 在依赖 JTS 后 dbVisitor 可以处理 WKB 或 WKT 格式的地理信息数据。
- 对于 InputStream/Reader 类型 或 数组类型 dbVisitor 也有一定的支持。
数据库事务
- 当项目是基于 Spring 技术构建时,通过 Spring 的 事务注解 完成事务控制。
- 当项目是基于 Solon 技术构建时,通过 Solon 的 事务注解 完成事务控制。
- 对于 Guice 和 Hasor 项目,可以使用 dbVisitor 的 @Transactional 注解 进行事务控制。
- 在没有任何字节码增强技术的应用程序中,可以利用 TransactionHelper 工具类将对象进行增强后在通过,@Transactional 注解 进行事务控制。
- 也可以通过 Java Code 方式、或者 模版代码 方式进行事务控制。
框架整合
- 利用 dbvisitor-guice 在 Google Guice 中使用 dbVisitor。
- 利用 dbvisitor-spring 在 Spring、SpringBoot 中使用 dbVisitor。
- 利用 dbvisitor-solon 在 Solon 中使用 dbVisitor。
- 利用 dbvisitor-hasor 在 Hasor 中使用 dbVisitor。