服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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

向大家介绍一个在开发过程产生的一个数据库持久层解决方案.
项目的名称: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.         ......