Ebean 的入门学习

1. 加密支持

1

你可以标记属性是通过 EncryptDeployManager 以编程方式进行加密 , 或者把 @Encrypted 注解的 bean 属性或两者的组合。

例如:

@Entity

@Table(name= detail )

public  class Detail{

@Id

Integer id;


@Encrypted

String name;


// 是否加密

@Lob

@Encrypted(dbEncryption =false)

String detail;


@Encrypted

Date dob;

...

}

2 局限性

1. java 客户端加密的内容不能应用于“ WHERE ”子句

2. 仅支持加密的 DB ,有 H2 Postgres MySql Oracle.

3. 您可以不使用加密和定位 (1 2 3…) 参数。您必须使用命名参数或 criteria api 定义的查询。

例如:

List<User> list = Ebean.find(User.class).select( id , name ).where().eq( name , Rob ).findList();

SQL 结果:

Select u.id as c0, pgp_sys_decrypt(u.name,?) as c1 from usertable u where pgp_sys_decrypt(u.xxx,?)=?


(3) 配置文件:

可以在 ebean.properties 文件中指定 EncryptKeyManager 实现,如下:

# ebean.properties - specify the Key Manager

ebean.encryptKeyManager=com.avaje.tests.basic.encrypt.BasicEncyptKeyManager

或者 通过配置 EeanServet ServerConfig 来设置 EncryptKeyManager . 如下:

// programmatically configure an EbeanServer

// with an EncryptKeyManager

ServerConfig config = ServerConfig();

...

EncryptKeyManager keyManager = ...;

config.setEncryptKeyManager(encyptKeyManager());

...

EbeanServer server = EbeanServerFactory.create(config);


(4) A EncryptKeyManager:

package com. a vaje.tests.basic.encrypt;

import com.avaje.ebean.config.EncryptKey;

import com.avaje.ebean.config.EncryptKeyManager;

public class BasicEncyptKeyManager implements EncryptKeyManager {

/**

* Initialise the key manager.

*/

public void initialise() {

// can load keys or initialise source resources ...

}

public EncryptKey getEncryptKey(String tableName, String columnName) {

// get the key for the given table and column

String keyValue = ...;

return new BasicEncryptKey(keyValue);

}

}


2. Save/Delete

1 Save instert 还是 update 要依赖它的状态。

如果是新建的:

User user = new User();

user.setName("han×××");

//insert  the   user

Ebean.save(user);


如果是获取来的 bean ,那就是更新了

User user = Ebean.find(User.class,2);

user.setName("lilei");

//update the user

Ebean.save(user);

2 Save Delete 将要 CASCADE 基于 CascadeType 明确到相关联的 @OneToMany,@OneToOne etc 注释。

默认的 save delete 不会 cascade ,所以需要指定一个 cascadeType save() 或者 delete() 变为 cascade.

例如:在对应的 Bean 模型中进行注释

@Entity

@Table(name="usertable")

Public calss User{

@ManyToOne

Name name;


@OneToMany(cascade=CascadeType.ALL)// 表示 save updae 同时对 User Detail 两个作用。

List<Detail> details;

...

//save the user 同时 saving the datail

Ebean.save(user);


3 Delete save 用法一样, Ebean.delete();

例如:

User user = Ebean.find(User.class,12);

//delete the user

//CascadeType.ALL CascadeType.REMOVE 同样适用

Ebean.delete(user);


懒加载

当你设置懒加载性能时,一个局部项目会在你需求的时候懒加载剩下的数据。

// find order 12

// ... fetching the order id, orderDate and version property

// .... nb: the Id and version property are always fetched

Order order = Ebean.find(Order.class) .select("orderDate") .where().idEq(12) .findUnique();

// shipDate is not in the partially populated order

// ... so it will lazy load all the missing properties

Date shipDate = order.getShipDate();

// similarly if we where to set the shipDate

// ... that would also trigger a lazy load

order.setShipDate(new Date());

懒加载时,它会自动的加载填充已经设置属性的 BEAN 中没有数据的。


// find customer 1

// ... just fetch the customer id, name and version property

Customer customer = Ebean.find(Customer.class)

.select("name")

.where().idEq(1)

.findUnique();

customer.setName("CoolName");

Ebean.save(customer);

Sql 语句 : select c.id, c.name   from or_customer c   where c.id = ?


文原创,已有几处论坛转载。