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,有H2PostgresMySql Oracle.

3.您可以不使用加密和定位(123…)参数。您必须使用命名参数或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

或者 通过配置 EeanServetServerConfig来设置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.avaje.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

1Saveinstert还是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);

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

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

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

@Entity

@Table(name="usertable")

Public calss User{

@ManyToOne

Name name;


@OneToMany(cascade=CascadeType.ALL)//表示saveupdae同时对UserDetail两个作用。

List<Detail> details;

...

//save the user  同时 saving the datail  

Ebean.save(user);


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

例如:

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

//delete the user

//CascadeType.ALLCascadeType.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 = ?  


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