如果理解正确,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()
来电怎么办?
答案 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
。所有数据库元数据都在运行时解析,而不是在编译或检测阶段解析。