代码之家  ›  专栏  ›  技术社区  ›  Tyler Clendenin

CFC中使用数据源的最佳实践

  •  3
  • Tyler Clendenin  · 技术社区  · 14 年前

    我有一个使用上下文相关数据源的应用程序。目前我将数据源信息存储在

    reqeust.DB.Datasource = "DatasourceName";
    request.DB.Username = "DatasourceUsername"
    request.DB.Password = "DatasourcePassword"
    

    然后根据上下文覆盖变量,因此每个cfquery标记都有属性datasource=“#request.DB.Datesource#”。。。等。。。

    我想开始转向更以CFC为中心的框架,比如Coldbox,但我不知道这会如何工作。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Henry    14 年前

    使用CF9,可以将Application.cfc中的this.datasource作为默认数据源。不幸的是,它似乎没有办法设置用户名/密码

    或者

    init 构造器或设置器。

    B、 )设置 <Datasources> Coldbox.xml.cfm ,请参见: http://wiki.coldbox.org/wiki/ConfigurationFile.cfm

    <!--Datasource Setup, you can then retreive a datasourceBean
       via the getDatasource("name") method: -->
    <Datasources>
      <Datasource alias="MyDSNAlias" 
                      name="real_dsn_name" 
                      dbtype="mysql" 
                      username=""
                      password="" />
    </Datasources>
    
        2
  •  0
  •   Anthony    14 年前

    即使您的对象只在请求级别进行初始化,以这种方式使用它似乎应该不那么痛苦。

    <cfscript>
    request.DB.Datasource = "DatasourceName";
    request.DB.Username = "DatasourceUsername";
    request.DB.Password = "DatasourcePassword";
    
    request.randomDAO = createObject('component','DAOStuff.randomDAO');
    request.randomDAO.init(DBObject = request.DB);
    
    request.someQuery = request.randomDAO.someGetter();
    request.someOtherQuery = request.randomDAO.someOtherGetter();
    request.aThirdQuery = request.randomDAO.aThirdGetter();
    </cfscript>
    

    与之相反:

    <cfscript>
    request.DB.Datasource = "DatasourceName";
    request.DB.Username = "DatasourceUsername";
    request.DB.Password = "DatasourcePassword";
    </cfscript>
    
    <cfquery name="request.someQuery" 
        datasource=request.DB.Datasource 
        username=request.DB.Username 
        password=request.DB.Password>
        --SOME SQL HERE
    </cfquery>
    
    <cfquery name="request.someOtherQuery" 
        datasource=request.DB.Datasource 
        username=request.DB.Username 
        password=request.DB.Password>
        --SOME SQL HERE
    </cfquery>
    
    <cfquery name="request.aThirdQuery" 
        datasource=request.DB.Datasource 
        username=request.DB.Username 
        password=request.DB.Password>
        --SOME SQL HERE
    </cfquery>
    

    <cfscript>
    request.someQuery = application.randomDAO.someGetter();
    request.someOtherQuery = application.randomDAO.someOtherGetter();
    request.aThirdQuery = application.randomDAO.aThirdGetter();
    </cfscript>