强制路由

    Hint 的主要使用场景:

    • 分片字段不存在 SQL 和数据库表结构中,而存在于外部业务逻辑。
    • 强制在指定数据库进行某些数据操作。
    1. 调用 HintManager.addDatabaseShardingValue,HintManager.addTableShardingValue 方法设置分片键值;
    2. 执行 SQL 语句完成路由和执行;
    3. 调用 HintManager.close 清理 ThreadLocal 中的内容。

    规则配置

    Hint 分片算法需要用户实现 接口。 Apache ShardingSphere 在进行路由时,将会从 HintManager 中获取分片值进行路由操作。

    获取 HintManager

    添加分片键值

    • 使用 hintManager.addDatabaseShardingValue 来添加数据源分片键值。
    • 使用 hintManager.addTableShardingValue 来添加表分片键值。

    清除分片键值

    分片键值保存在 ThreadLocal 中,所以需要在操作结束时调用 来清除 ThreadLocal 中的内容。

    完整代码示例

    使用 SQL 注释的方式

    使用规范

    SQL Hint 功能的注释格式暂时只支持 /* */,内容需要以 SHARDINGSPHERE_HINT: 开始,可选的属性包括:

    • {table}.SHARDING_DATABASE_VALUE:用于添加 表对应的数据源分片键值,多个属性使用逗号分隔;
    • {table}.SHARDING_TABLE_VALUE:用于添加 {table} 表对应的表分片键值,多个属性使用逗号分隔。

    分库不分表情况下,强制路由至某一个分库时,可使用 SHARDING_DATABASE_VALUE 方式设置分片,无需指定 。

    完整示例