轻量级ORM框架ActiveJDBC介绍

13年前
这款开源轻量级的ORM框架,看了下例子,感觉非常小巧轻量简单。
public class Main {      public static void main(String[] args) {          new DB("corporation").open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/test",                  "root", "p@ssw0rd");          new DB("university").open("oracle.jdbc.driver.OracleDriver",                  "jdbc:oracle:thin:@localhost:1521:xe",                  "activejdbc", "activejdbc");            Employee.deleteAll();          Student.deleteAll();            Employee.createIt("first_name", "John", "last_name", "Doe");          Employee.createIt("first_name", "Jane", "last_name", "Smith");            Student.createIt("first_name", "Mike", "last_name", "Myers");          Student.createIt("first_name", "Steven", "last_name", "Spielberg");            System.out.println("*** Employees ***");          Employee.findAll().dump();          System.out.println("*** Students ***");          Student.findAll().dump();            new DB("corporation").close();          new DB("university").close();      }  }

ActiveJDBC 是一个快速和轻量级的 Java 的 ORM 小型框架,语法简单易于理解,同时支持多数据库链接。ActiveJDBC 的文档(javadoc)非常完善。基于以下原则设计:

  • 惯例重于配置(无配置)
  • 拥有 SQL 知识就足够了
  • 轻量级而且直观的代码
  • 无会话
  • 无持久层管理
  • 无 proxying

有关ActiveJDBC的特性的官方说明在这里:http://code.google.com/p/activejdbc/wiki/Features

项目发布在Google Code网站上,地址是:http://activejdbc.googlecode.com 可以使用SVN 将项目Check out下来。

ActiveJDBC 项目是使用Maven进行构建和管理JAR包的,具体怎样使用Maven来进行构建,它的网站上写得很详细,Maven本身也很简单。这里我只是记录下我的操作步骤,使用手动构建的。

1. 创建测试工程,引入必要的JAR包

在MyEclipse里新建一个WEB工程(JAVA工程也可以), 然后,引入所需要的JAR包

image

这些JAR包可以到http://ipsolutionsdev.com/snapshots/ 这里下载,最新的JAR包在页面最下面。上面这些JAR包缺一不可,我首先引入的是activejdbc包,然后根据ClassNotFoundException挨个导入的。

接着可以看下ActiveJDBC文档的Getting Started页,写得非常简洁,可以让你很快上手。

2. 创建数据库和表

建表语句是:

    create database test;        use test;        create table (        id int(32) default not null auto_increment primary key,        first_name varchar(65),        last_name varchar(65)        );  

AJ的表名与Model名是有命名约定的,比如Model名为Employee,对应表名为employees。

3. 新建一个POJO

内容如下:

    package cn.ijser.pojo;        import activejdbc.Model;        public class Employee extends Model {        }  

没 有Getters和Setters? 没错,不需要,而且ActiveJDBC也不推荐。它是利用了JAVA的反射机制来进行识别的,不仅不必写Getters和Setters,连同 fields也不必写,只要你事先建立好表,AJ会自动为你建立映射。而且也不必配置表名与POJO间的对应关系,因为AJ遵循“约定>配置”的原 则,可以省掉配置文件,非常方便简单。

3. 建立一个创建Instrumentation的文件

Instrumentation是对已经编译好的POJO们进行一下处理,添加了父类的静态方法,这样才可以像下面这样使用:

List<Person> retirees = Person.where("age >= ?", 65);

否 则,AJ不会知道将要操作的表或数据库,因为静态方法是属于类而不是对象的。这样虽然稍微麻烦点,但是好处也是挺不错的,它不必像其它ORM框架一样,需 要使用第三个类来进行管理,比如JPA使用的PersistentManager和Hibernate 使用的Session。

尽管AJ需要增加一步额外的构建过程,但它使API的设计更加直观和简洁。

还有一点要说明的是,Instrumentation的创建也是很快的,而且只需要在程序编译的时候进行创建即可。官方文档中说50-60个models只需要5-7s,一般的小型程序(10个以内models的程序)只需要1-2秒即可完成。

官方文档只主要介绍了使用Maven,Ant,和StandAlone三种方式,我使用的是另外一种,JAVA程序实现的。只需要创建一个工具类,然后在编译之后,运行之前调用一下这个类的make方法即可。

    package cn.ijser.utils;        import activejdbc.instrumentation.Instrumentation;        public class MakeInstrumentationUtil {        public static void make() {        try {        Instrumentation instrumentation = new Instrumentation();        instrumentation.setOutputDirectory(ClassLoader        .getSystemResource(“”).getPath());        instrumentation.instrument();        } catch (Exception e) {        e.printStackTrace();        }        }        }  

4. 创建测试类。

    package cn.ijser.test;        import activejdbc.Base;        import cn.ijser.pojo.Employee;        import cn.ijser.utils.MakeInstrumentationUtil;        public class Test {        public static void main(String[] args) {        MakeInstrumentationUtil.make(); # 这里创建Instrumentation        Base.open(“com.mysql.jdbc.Driver”, “jdbc:mysql://localhost/activejdbc”,        “root”, “sa”);        Employee e = new Employee();        e.set(“first_name”, “John”);        e.set(“last_name”, “ijse”);        e.save();        }        }           

AJ的具体使用方法,可以查看AJ的文档,上面这个测试代码只是向数据库的employees表中写入了一条记录。

=========

PS:

比较惭愧的是,自己没有学会使用Maven来进行构建和学习ActiveJDBC,继续学习Maven…

感谢曹江华Arden的热心解答。