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 = ?
本
文原创,已有几处论坛转载。