ActiveJdbc检测编译器在哪里获取有关数据库的信息?

时间:2014-09-08 13:05:51

标签: java maven activejdbc

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

public class Employee extends Model {}

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

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

我在这里只找到一个地方http://javalite.io/getting_started,其中提到了数据库,即

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

那么,检测编译器是否会扫描代码以调用Base.open()并解析它的URL?

我无法相信。如果有多个不同数据库的调用怎么办?

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

1 个答案:

答案 0 :(得分: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的{​​{1}}文件中添加一行,其中第一个方法返回类的完全限定名,第二个方法返回model.getName() + ":" + getDatabaseName(model) + "\n"注释的值如果没有找到注释,则在课程上@DbName

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