SimpleFramework框架高级特性之数据访问
创始人
2024-07-26 15:01:31
0

Simple数据访问层基于Spring JDBC。

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

 

 

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

表实体管理器

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

查询实体管理器

表实体管理器

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

 

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

 

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

查询id等于1的单行记录

 

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

 

查询id大于1的多行记录

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

 

 

 

插入id等于2的记录

  1. Map data2 = new HashMap();  
  2. data2.put("id", 2);  
  3. data2.put("f1", "value1");  
  4. data2.put("f2", true);  
  5. tem.insert(data2);   
  6. 或则  
  7. TestBean bean2 = new TestBean();  
  8. bean2.setId(2);  
  9. bean2.setF1("value1");  
  10. bean2.setF2(true);  
  11. tem.insert(bean2);  

 更新id等于2的记录

  1. data2.put("f1", "value1_update");  
  2. tem.update(data2);  
  3. 或则  
  4. bean2.setF1("value1_update");  
  5. tem.update(bean2);  

删除id等于2的记录

 

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

操作多个物理表

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

 

  1. TestBean bean = new TestBean();  
  2. bean.set…  
  3. tem.insert(bean);  
  4. ITableEntityManager tem2 =  
  5.     DataObjectManagerFactory.getTableEntityManager(dataSource, new Table("simple_test2", "id"));  
  6. Test2Bean bean2 = new Test2Bean();  
  7. bean2.set…  
  8. tem2.insert(bean2);  
  9. …  

 

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

 

  1. tem.insertTransaction (bean, new TableEntityAdapter() {  
  2.     public void afterInsert(final ITableEntityManager manager,   
  3.                 final Object object, final SQLValue sqlValue) throws EntityException {  
  4.         …  
  5.         tem2.insert(bean2);  
  6.     }  
  7. });  

 

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

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

查询实体管理器

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

 

  1. IQueryEntityManager qem = DataObjectManagerFactory.getQueryEntityManager(dataSource); 

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

 

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

结果集(IQueryEntitySet)

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

有状态信息

动态及分页获取

可前后滚动

可定制缓存

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

 

  1. TestBean bean;  
  2. while((bean = qs.next()) != null) {  
  3.     System.out.println(bean.getId());  
  4. }  
  5. qs.move(2);  
  6. System.out.println(qs.next());  

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...