赛迪网 > IT技术 Java > 架构-与-模式
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

数据库相关:全新的数据持久层解决方案

发布时间:2007.12.26 07:34     来源:赛迪网    作者:lihy70

向大家介绍一个在开发过程产生的一个数据库持久层解决方案.
项目的名称:dbcoat, 可以到访问:http://sourceforge.net/projects/dbcoat.
本方案的理念:
1,简单

2,容易学,容易用。
    在五到十分钟就可以学会,用户手册只有几页。
    ‘你会不会***?‘ 不再成为一个问题。
    
3, 在数据库外,忘记了是在操作数据库。

4. 提供一个解决方案,而不是更多的可选方法。

5,舒心顺手
     就像它的名字,希望它能像一件为你订做的外套。

支持的功能:
1,连接池
   连接池支持断开自动重新连接,数据库连接支持‘时间’特性。
2,缓存(Cache)
   1), Cache 是自我管理的,也就是说Cache会自动更新,Cache也有时间限制,
      如果限制的时间到了,Cache会被自动删除。

   2), 条件Cache. 举例来说,像下面这样设置cache option:
       

  1. options.put(Cache.CACHE_RESULT_CONDITION, Cache.condition(8, 100, 2));

       上面代码的意思是:
       当结果集的数量(size)等于大于8并小于等于100
       或搜索的时间大于等于2毫秒时才缓存结果集
       条件cache可以让你只在真需要时缓存结果

    3), 片断结果集cache. 举例来说,你要浏览10000条结果集,每页200个
        像下面这样设置cache option:
       
  1. options.put(Cache.CACH_RESULT_RANGE, Cache.range(0, 200, 200, 400, 9800, 10000))
;
       或
       
  1. options.put(Cache.CACH_RESULT_RANGE, Cache.range(0, 400, 9800, 10000));

       上面代码的意思是:缓存第一页,下一页和最后一页的结果集。
       片断结果集cache可以让只缓存必要的结果集。

       条件和片断结果集cache可以让你有效地用好cache.

    4), 结果集相同的共享同一cache.
        假设有100条纪录,id从1到100,
        由条件'id >= 1' 和 'id <= 100' 创建的结果集共享同一cache, 如果缓存他们。

3,支持join

4, 支持数据库函数:count, avg 等。

用户导向:
1, 准备连接工厂。有两种方式:
    a), 写一个像下面xml文件:
  1.         "1.0" encoding="UTF-8"?>
  2.         
  3.         com.mysql.jdbc.Driver
  4.         jdbc:mysql://localhost:3306/coatTestdb
  5.         root
  6.         
  7.         1000
  8.         true
  9.         true
  10.         
  11.         86400
  12.         
  13.         600
  14.         
  15.         3
  16.         1000
  17.         

    创建连接工厂:
  1.         ConnectionFactory connFact = ConnectionFactory.newInstance(new FileInputStream(
  2.                 new File(propsFile)));
  3.     

    b), 在代码里设置连接属性:
  1.         Properties props = new Properties();
  2.         props.setProperty(DRIVER, driver);
  3.         props.setProperty(URL, url);
  4.         props.setProperty(USER, user);
  5.         props.setProperty(PASSWORD, password);
  6.         ......
  7.         ConnectionFactory connFact =  ConnectionFactory.newInstance(props);

2, 准备持久对象定义文件:
  1.         ......
  2.         Connection conn = connFactgetConnection();
  3.         Database database = new Database(databaseName, conn);
  4.         if (objectDefinitionsFile.exists()) {
  5.             objectDefinitionsFile.delete();
  6.         }
  7.         objectDefinitionsFile.createNewFile();
  8.     
  9.         OutputStream ou = new FileOutputStream(objectDefinitionsFile);
  10.         Assistant.database2ObjectDefinitionXml(ou, database,
  11.         HelloCoatBase.class.getMethod("columnName2PropName",
  12.             new Class[] { String.class }));
  13.         ou.close();
  14.         ......

   详细信息查看'helloworld' 例程:
        http://sourceforge.net/projects/dbcoat

3,用上面准备的连接工厂和持久对象定义文件,创建持久对象管理(ObjectManager)或(Session)实例。
  1.         ......
  2.         ConnectionFactory connFactory = ConnectionFactory.newInstance(connProps);     
  3.         ObjectDefinitionFactory odfact = ObjectDefinitionFactory.getInstance();
  4.         odfact.create(new FileInputStream(file));
  5.         
  6.         ObjectManagerFactory omf = ObjectManagerFactory.getInstance(odfact,
  7.             connFactory);
  8.         ......
  9.         
  10.         EntityManager entityManager = omf.getEnityManager();
  11.         EntitySession entitySession = omf.getEntitySession();        
  12.         // or        
  13.         ObjectManager objectManager = omf.getObjectManager();
  14.         ObjectSession objectSession = omf.getObjectSession();
  15.         ......             

4,用(ObjectManager)或(Session)实例管理持久对象。
  1.         ......
  2.         
  3.         ObjectEntity oe = new ObjectEntity(Book._);
  4.         oe.setValue(Book.ID, id);
  5.         oe.setValue(Book.NAME, "Gone with the wind");
  6.         oe.setValue(Book.AUTHOR, "Margaret Mitchell");
  7.         entityManager.addObject(oe); // or session.add(oe);
  8.         ......

        (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 如何在MyEclipse快速搭建Hibernate应用 (12-25) · Java语言深入:java匿名内部类的一点讨论 (12-25)
· 进阶:Composite模式及其在JSF中的应用 (12-25) · JSP/Servlet/JSF:JavaEE 不再需要 Ajax (12-25)
· 开发框架:深入了解 Struts Validator (12-25) · J2SE综合:如何在Java中实现条件编译 (12-25)
· 在Eclipse RCP中实现控制反转(IoC) (12-25) · Eclipse使用技巧 (12-25)
· java 中使用websphere MQ (12-24) · Web Services:处理XML字符串中特殊字符 (12-24)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 管理软件市场百家争鸣 办公OA是否能当敲门砖
· 畅通生命线 信息化时代灾后重建与时间赛跑
· 天灾中信息化显力量 CIO如何应对新领导IT改革
· 河南网通数据中心工程 网御神州VPN解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统