2

如果理解正确,ActiveJdbc编译器应该像这样输入空心类

public class Employee extends Model {}

并用数据库元数据中的一些代码填充它。

但是它怎么知道数据库的位置呢?

我发现这里只有一个地方http://javalite.io/getting_started提到了数据库,即

Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/test", "user1", "xxxxx");

那么,仪器编译器是否会扫描代码以查找对 URL 的调用Base.open()并将其解析为 URL?

我不敢相信。如果多次调用不同的数据库怎么办?

如果没有Base.open()电话怎么办?

4

1 回答 1

2

查看activejdbc-instrumentation source,基本上是:

  • org.javalite.activejdbc.Model查找每个类 的非抽象子类
    • 添加委托给 的方法,org.javalite.activejdbc.Model包括:
      • public static MetaModel getMetaModel()
      • public static List<String> attributes()
      • public static List<Association> associations()
      • public static int delete(String query, Object... params)
      • public static boolean exists(Object id)
      • public static int deleteAll()
      • public static int update(String updates, String conditions, Object ... params)
      • public static int updateAll(String updates, Object ... params)
      • 和更多 ...
    • 添加public static String getClassName()返回类的完全限定名称的方法。
    • activejdbc_models.properties在包含 的文件中添加一行model.getName() + ":" + getDatabaseName(model) + "\n",其中第一个方法返回类的完全限定名称,第二个方法返回@DbName类上注释的值,或者"default"如果没有找到注释。

所有数据库元数据都在运行时解析,而不是在编译或检测阶段。

于 2014-09-08T14:14:45.573 回答