你的分享就是我们的动力 ---﹥

Easy Java Persistence (EJP)

时间:2014-12-25 18:38来源:www.chengxuyuans.com 点击:

EJP是jPersist的下一个主要的发布版本/分支。这是一个简易、无需配置和注解,基于JDBC的框架。它并不是JPA的一个实现,其要简单和小型(<200K)得多。进行这种版本分割的原因是因为EJP不向后兼容jPersist,因为EJP远要先进得多,其能够自动处理每件事情。好消息是jPersist用户会发现在两者之间做切换是轻而易举的事情。

正如大多数的编程者意识到的那样,JPA/Hibernate所要求的定义(xml/annotation)大多是出于模式(schema)生成这一目的的需要,而不是用于映射(尽管JPA和Hibernate两者都需要映射的定义)。由于JDBC提供了所有需要用来指出对象和数据之间的映射的数据,因此这些定义实际上并不需要,除非内置于代码中的模式(schema)生成是必需的。

大多数情况下,数据库都是独立于运行程序创建的。换句话说,数据库团队创建数据并且是/或者由你来创建数据库,但并不会通过运行应用来创建数据库,这也就是所说的关注点分离,许多人都认为这是最好的一种做法。

如果“在代码”中生成模式(schema)是你所需要的话,则EJP可能不适合你使用,因为EJP并不创建模式(schema)。不过,如果你只是想连接和使用数据库的话,那么EJP是你的最佳选择。

使用EJP来连接你的数据库简单如此:

dbm = new DatabaseManager("mydb", 5, "com.mysql.jdbc.Driver",
                          "jdbc:mysql://localhost/mydb");

或者:

dbm = new DatabaseManager("mydb", 5, "jndiPath");

在创建DatabaseManager时还有其他几个可用的选项。

一旦有了到数据库的连接,你只要调用 loadObject()、loadObjects()、saveObject()、deleteObject()这些方法就可以了,这些是用得最多的DatabaseManager方法。

现在举一个简单的例子,下面的客户(Customer)类是一个普通的POJO:

public class Customer
{
    String username;
    String firstName;
    List support;     //关联关系
    List orders;      //关联关系
    ...
    // getters/setters
    ...
}

  

加载一个客户:

Customer customer = dbm.loadObject(new Customer("johnsmith"));

加载所有的客户:

List customers = dbm.loadObjects(new ArrayList(),
                                           Customer.class);

我们仅通过用户名“johnsmith”来把一个客户加载进来,我们不需要一行XML,不需要一个注解就做到了这一点。EJP从JDBC的数据库元数据中查找出表(使用pluralizer)、列、键和所有的关联关系(它们的加载是可选的).

EJP自动跟踪对象的变化以及对象的持久化状态,因此调用:

customer.setLastName("Smithman");

dbm.saveObject(customer);

将会创建如下的SQL:

update customers set last_name = 'SmithMan' where username = 'johnsmith';

现在,如果我们要创建一个新的客户的话:

Customer customer = new Customer("Johnjones", "John", "Jones");

调用:

dbm.saveObject(customer);

这将把对象插入到客户表(customers)中,从这一刻开始,customer发生的任何改变都会引起customers表的更新。

使用SQL片段和/或对象属性

使用EJP来找出特定的对象或是一组对象很容易,可使用对象属性或是指定一个where子句来做到这一点。例如:

Customer customer = new Customer();

//找出所有姓氏为 Smith的客户
customer.setLastName("Smith");
dbm.loadObject(customer);

或者:

dbm.loadObject(new Customer(), "where :lastName = ?", "Smith");

使用通配符

// 找出所有姓氏以Simith开头的客户
customer.setLastName("Smith%");

or:或者:

dbm.loadObject(new Customer(), "where :lastName like ?", "Smith%");

用多个属性搜索

customer.setFirstName("John");
customer.setLastName("Smith");

or:或者:

dbm.loadObject(new Customer(),
               "where :firstName = ? and :lastName = ?", "John", "Smith");

:name仅表示属性的名称,它可被自动地转换成表的列名,你也可以直接使用表的列名:

dbm.loadObject(new Customer(), "where last_name = ?", "Smith");

DatabaseManage还提供了几个进行纯SQL操作的方法:

List customers = dbm.executeQuery(new ArrayList(),
                                  "select * from customers");

该方法简单返回代表了查询结果的对象数组的一个List。

可以看出,EJP是一个用于面向对象的关系数据库访问的非常强大的工具,我们在近期会撰写一些涵盖到EJP的每一方面的文章。

转载注明地址:http://www.chengxuyuans.com/Java+/86280.html