模块 linlang.api

接口 DataService

所有超级接口:
AutoCloseable

public interface DataService extends AutoCloseable
数据库服务门面,负责连接初始化、实体仓库管理与结构迁移。

服务实例由 Linlang 运行时提供,不通过 ServiceLoader 发现。 一个典型生命周期如下:

  1. 使用 init(DbType, DbConfig) 初始化连接池;
  2. 使用 repo(Class) 获取实体仓库;
  3. 按需使用 migrate() 同步数据库结构;
  4. 在插件关闭时调用 close()。
  • 嵌套类概要

    嵌套类
    修饰符和类型
    接口
    说明
    static class 
    数据库连接配置。
    static enum 
    运行时内建支持的数据库类型。
  • 方法概要

    修饰符和类型
    方法
    说明
    default void
    关闭数据库服务。
    void
    将所有仓库中尚未提交的修改写入底层数据库。
    <T> void
    flushOf(Class<T> entityType)
    将指定实体仓库中尚未提交的修改写入底层数据库。
    void
    根据数据库类型与连接配置初始化服务。
    void
    执行实现支持的数据库结构迁移。
    <T, ID> Repository<T,ID>
    repo(Class<T> entityType)
    获取绑定到指定实体类型的仓库。
  • 方法详细资料

    • init

      根据数据库类型与连接配置初始化服务。
      参数:
      type - 数据库类型
      cfg - 连接配置
      抛出:
      IllegalStateException - 服务已经初始化或运行时无法建立连接时
    • repo

      <T, ID> Repository<T,ID> repo(Class<T> entityType)
      获取绑定到指定实体类型的仓库。

      实体必须声明 @Table,并且只能包含一个 @Id 字段。 自动生成的主键仅支持 int 与 long。实体需要提供无参数构造方法, 该构造方法可以不是公开的。

      类型参数:
      T - 实体类型
      ID - 主键类型
      参数:
      entityType - 实体类
      返回:
      对应实体的仓库
    • migrate

      void migrate()
      执行实现支持的数据库结构迁移。

      运行时采用非破坏性的增量迁移:创建缺失的数据表、列、主键与索引, 并应用新声明的默认值和表注释。迁移不会自动删除列,也不会缩窄或改写已有列类型。

    • flushAll

      void flushAll()
      将所有仓库中尚未提交的修改写入底层数据库。
    • flushOf

      <T> void flushOf(Class<T> entityType)
      将指定实体仓库中尚未提交的修改写入底层数据库。
      类型参数:
      T - 实体类型
      参数:
      entityType - 实体类
    • close

      default void close()
      关闭数据库服务。

      默认实现仅调用 flushAll();具体运行时可以覆盖此方法以释放连接池。

      指定者:
      close 在接口中 AutoCloseable