日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SRF之数据访问

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SRF之数据访问 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據訪問組件實現實體類和數據表映射、SQL語句配置執行、動態sql語句等功能,ORM方式能實現簡單的對象和表的映射(配置類似hibernate),但比較單一(不支持一對多、多對多的情況),下邊不做介紹,采用配置SQL語句的方式更靈活強大,可實現sql語句的集中管理、動態的sql語句以及對象和SQL語句的映射。

?

如何使用

配置文件

data.config:配置數據庫訪問相關信息,配置文件放站點的bin目錄下,詳細說明如下

<?xml version="1.0" encoding="utf-8" ?> <config xmls="urn:entlib.data-config"><!--sql語句目錄,映射文件目錄,可以用相對目錄--><property name="mappingdir">/map</property><!--枚舉型是否用整形表示(即在枚舉型用整形保存到數據庫)true,false,默認false--><property name="enumasint">false</property><!--是否記錄日志(true,false),默認true--><property name="Logging">true</property><!--數據庫鏈接字符串,注意不包含Provider(連接多個數據庫時添加多個connection)--><connection name="" dbtype="mssql">Data Source=localhost;Initial Catalog=gh_oms;User ID=sa;Password=1</connection> </config> View Code

?

SQL配置文件

sql配置文件所在的目錄在data.config的mappingdir定義,也可放在mappingdir的子目錄,

文件名:xxx.map.xml

<?xml version="1.0" encoding="utf-8" ?> <map xmlns="urn:srf.data-mapping"><query name="admin.user.get"><![CDATA[selectId,Name,LoginId,Email,Phone,IM,Sex,Enabled,DepartmentId,(select name from SEC_Department where id=DepartmentId) as Departmentfrom SEC_User where 1=1and Id=:Id]]></query> </map> View Code

name:sql語句的名稱,必須在所有的映射文件中是唯一的,命名建議:模塊.對象.操作

mode:語句解析方式

  • 默認寫法(mode="")
    參數:用:xxxx 參數用:前綴,不區分大小寫,字符串參數$xxxx$將用字符串替換
    動態sql:在{ }里邊的參數(只要有一個參數)如果沒有值 則該部分語句將移除。?不支持字符串參數。?????
  • velocity寫法?(mode="velocity")
    采用velocity的語法編寫,提供擴展函數 util.IsNullOrEmpty()

?

調用

引用 SRF.Data.dll
調用代碼:
readonly Data.DBHelperBase dbhelper = Data.DBHelperFactory.GetDBHelper();
dbhelper.GetQuery("admin.user.insert").SetParameter(user).Execute();

?

補充

(1)模糊查詢

目前不支持在配置的語句中給參數加上通配符,模糊查詢時您需要在代碼里邊給參數值加上通配符,如果是SRF.UI.DataSource查詢列表可參考下邊代碼

SRF.UI.DataSource datasource = new UI.DataSource("admin.user.list", "admin.user.count", m => { m.Like("name"); });//給參數name的值加上通配符

(2)全局參數

除了調用時傳遞參數外,你也可以添加一些全局參數(每次調用都自動傳遞這些參數),做法如下:

SRF.Data.Query.AddParameter("user.id", SRF.Security.SecurityContext.User.Id);// 添加當前用戶id作為全局參數

在配置語句時可以這么寫

select*from post where?userid=@user.id?

目前系統默認添加的有當前用戶信息的參數(user.id,user.loginid,user.username),你可以在配置語句時使用這3個參數。

?

關于事務

SRF.Data庫本身不提供事務的支持,可用TransactionScope實現(請確保web服務器和數據庫服務器的運行msdtc服務)

示例代碼如下:

using (TransactionScope transationScope = new TransactionScope(TransactionScopeOption.Required)) {dbhelper.GetQuery("admin.dictionary.delete").SetParameter("Id", id).Execute();transationScope.Complete(); }

?

SQL語句生成

數據庫訪問配置的語句可以用CodeSmith來生成,下載CodeSmith模板

?

如何實現

1、語句的解析

第1步對配置的sql做解析:根據參數將配置語句解析成可語法正確的帶參數的sql語句,解析器實現ISQLParser接口。SRF.Data自帶2種解析器,DefaultSQLParser和VelocitySQLParser,DefaultSQLParser采用正則表達式對配置的語句做解析,VelocitySQLParser采用NVelocity模板語言的語法解析(這種方式可以實現比較復雜的語句,但效率相對較低)。
第2步解析語句中的參數以及傳遞過來的參數列表生成DbCommand,參考Query.BuildCommand()

自定義sql解析器:

(1)? 實現ISQLParser接口

public interface ISQLParser{string Parse(string sql, IDictionary<string, object> parameters, char parameterToken);//根據參數解析sql,返回可執行的sql語句}

(2)? SQLParserFactory.Register()注冊SQL解析器

(3)? 在映射文件中寫明解析器的key
  <query name="admin.user.insert" mode="解析器的SqlKey">

?

2、數據庫操作

數據庫的訪問和語句執行在Database類實現,由于不同數據庫的Provider和語句有所差別,所以不同的數據庫要繼承Database,例如MySql

public class MySqlDatabase : Database{public MySqlDatabase(string connectionString): base(connectionString, MySql.Data.MySqlClient.MySqlClientFactory.Instance){}public override string BuildPageSql(string sql, int startRow, int? maxRows,string orderBy=""){sql += string.Format(" limit {0},{1}", startRow - 1, maxRows == null ? -1 : maxRows.Value);return sql;}public override char ParameterToken{get { return ':'; }}} View Code

支持更多數據庫:

目前框架支持mssql、mysql、sqlite數據庫,你也可以擴展增加其它數據庫的支持

1、繼承SRF.Data.Impl.Database

Database實現具體的數據庫操作,包括數據庫連接和語句執行

2、注冊Database

SRF.Data.Impl.DatabaseFactory.Register()

3、調用

在data.cfg.xml配置文件中填寫數據庫類型(和Register方法的參數key一致)

<property name="dbtype">mssql</property>

?

?

轉載于:https://www.cnblogs.com/zengyy/p/3361104.html

總結

以上是生活随笔為你收集整理的SRF之数据访问的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。