SimpleFramework 数据访问组件介绍

cknet 发布于 2010/11/05 10:46
阅读 183
收藏 1

原文:http://simpleframework.net/simple/main/doc/d2/d.jsp

Simple数据访问层基于Spring JDBC。

Simple数据访问层的核心概念为“实体管理器”,所有对数据的访问都是通过不同的“实体管理器”产生的,这使得Simple对数据的访问更加简单、一致、也更为安全。

Simple提供了三种“实体管理器”,分别为:

  • 表实体管理器
  • 具有缓存(或分布式缓存)的表实体管理器
  • 查询实体管理器

表实体管理器

表实体管理器提供了对单张物理表的基本操作(select,insert,update、delete),可以通过如下方式获取表实体管理器:

ITableEntityManager tem = 
DataObjectManagerFactory.getTableEntityManager(dataSource, new Table("simple_test", "id"));

下面演示一些通过ITableEntityManager操作表数据的例子:

查询id等于1的单行记录

Map data = tem.queryForMap(new UniqueValue(1));
或则
TestBean bean = tem.queryForObject(new UniqueValue(1), TestBean.class);

查询id大于1的多行记录

IQueryEntitySet qs = tem.query(new ExpressionValue("id>1"));
或则
IQueryEntitySet qs2 = tem.query(new ExpressionValue("id>1", TestBean.class));

插入id等于2的记录

Map data2 = new HashMap();
data2.put("id", 2);
data2.put("f1", "value1");
data2.put("f2", true);
tem.insert(data2);
或则
TestBean bean2 = new TestBean();
bean2.setId(2);
bean2.setF1("value1");
bean2.setF2(true);
tem.insert(bean2);

更新id等于2的记录

data2.put("f1", "value1_update");
tem.update(data2);
或则
bean2.setF1("value1_update");
tem.update(bean2);

删除id等于2的记录

tem.delete(new ExpressionValue("id=2"));

操作多个物理表

在非事务环境下,操作多张表只需定义不同的表实体管理器:

TestBean bean = new TestBean();
bean.set…
tem.insert(bean);
ITableEntityManager tem2 =
DataObjectManagerFactory.getTableEntityManager(dataSource, new Table("simple_test2", "id"));
Test2Bean bean2 = new Test2Bean();
bean2.set…
tem2.insert(bean2);

在事务环境下,操作多张表需要定义监听器:

tem.insertTransaction (bean, new TableEntityAdapter() {
public void afterInsert(final ITableEntityManager manager,
final Object object, final SQLValue sqlValue) throws EntityException {

tem2.insert(bean2);
}
});

具有缓存(或分布式缓存)的表实体管理器

具有缓存(或分布式缓存)的表实体管理器继承自表实体管理器,其用法和表实体管理器一样,区别在于查询的结果对象,一个是从数据库直接创建的,一个是从缓存设备中获取的,Simple默认采用EHCahce来管理缓存。

查询实体管理器

和表实体管理器不同,查询实体管理器是基于SQL的,通过传递SQL语句来获取结果集,并且结果集对象以Map形式存在,可以通过如下方式获取表实体管理器:

IQueryEntityManager qem = DataObjectManagerFactory.getQueryEntityManager(dataSource);

查询指定条件的单行或多行记录

Map data = qem.queryForMap(
new SQLValue("select * from table1 t1, table2 t2 where t1.c1=t2.c2 and t2.c3=?",
new Object[] {1}));

IQueryEntitySet qs = qem.query(
new SQLValue("select * from table1 t1, table2 t2 where t1.c1=t2.c2"));

结果集(IQueryEntitySet)

IQueryEntitySet是一个高效、可靠的结果集,其设计准则:

  • 有状态信息
  • 动态及分页获取
  • 可前后滚动
  • 可定制缓存

下面是访问结果集的示例代码:

TestBean bean;
while((bean = qs.next()) != null) {
System.out.println(bean.getId());
}
qs.move(2);
System.out.println(qs.next());
加载中
返回顶部
顶部