SimpleFramework框架高級(jí)特性之?dāng)?shù)據(jù)訪問
Simple數(shù)據(jù)訪問層基于Spring JDBC。
Simple數(shù)據(jù)訪問層的核心概念為“實(shí)體管理器”,所有對(duì)數(shù)據(jù)的訪問都是通過不同的“實(shí)體管理器”產(chǎn)生的,這使得Simple對(duì)數(shù)據(jù)的訪問更加簡單、一致、也更為安全。

Simple提供了三種“實(shí)體管理器”,分別為:
表實(shí)體管理器
具有緩存(或分布式緩存)的表實(shí)體管理器
查詢實(shí)體管理器
表實(shí)體管理器
表實(shí)體管理器提供了對(duì)單張物理表的基本操作(select,insert,update、delete),可以通過如下方式獲取表實(shí)體管理器:
- ITableEntityManager tem =
- DataObjectManagerFactory.getTableEntityManager(dataSource, new Table("simple_test", "id"));
下面演示一些通過ITableEntityManager操作表數(shù)據(jù)的例子:
查詢id等于1的單行記錄
- Map data = tem.queryForMap(new UniqueValue(1));
- 或則
- TestBean bean = tem.queryForObject(new UniqueValue(1), TestBean.class);
查詢id大于1的多行記錄
- IQueryEntitySet<Map> qs = tem.query(new ExpressionValue("id>1"));
- 或則
- IQueryEntitySet<TestBean> 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"));
操作多個(gè)物理表
在非事務(wù)環(huán)境下,操作多張表只需定義不同的表實(shí)體管理器:
- 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);
- …
在事務(wù)環(huán)境下,操作多張表需要定義監(jiān)聽器:
- tem.insertTransaction (bean, new TableEntityAdapter() {
- public void afterInsert(final ITableEntityManager manager,
- final Object object, final SQLValue sqlValue) throws EntityException {
- …
- tem2.insert(bean2);
- }
- });
具有緩存(或分布式緩存)的表實(shí)體管理器
具有緩存(或分布式緩存)的表實(shí)體管理器繼承自表實(shí)體管理器,其用法和表實(shí)體管理器一樣,區(qū)別在于查詢的結(jié)果對(duì)象,一個(gè)是從數(shù)據(jù)庫直接創(chuàng)建的,一個(gè)是從緩存設(shè)備中獲取的,Simple默認(rèn)采用EHCahce來管理緩存。
查詢實(shí)體管理器
和表實(shí)體管理器不同,查詢實(shí)體管理器是基于SQL的,通過傳遞SQL語句來獲取結(jié)果集,并且結(jié)果集對(duì)象以Map形式存在,可以通過如下方式獲取表實(shí)體管理器:
- 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<Map> qs = qem.query(
- new SQLValue("select * from table1 t1, table2 t2 where t1.c1=t2.c2"));
- TestBean bean;
- while((bean = qs.next()) != null) {
- System.out.println(bean.getId());
- }
- qs.move(2);
- System.out.println(qs.next());