DMSFrame 之簡單用法(一)

2022-02-23 09:26:54 字數 3927 閱讀 8976

1.dmsframe是乙個完整的orm框架,框架相對來說也比成熟了。使用上有些地方還是比較方便的。dll檔案大約300k左右,但卻可以支援各種方式的查詢,完全的linq化的方式書寫**,更有利於維護。

2.框架完全支援除錯時生成的sql語句跟蹤,你可以很清晰地看出是**的寫法出了問題。

3.框架附加了完全支援查詢sql的寫法。更有效的解決複雜的sql的問題

先上**嚐嚐先吧:

1 var query = dms.create().where(q => q.userid == 1).toentity();

生成sql引數如下:

select [t0].[userid],[t0].[username],[t0].[truename],[t0].[userpwd],[t0].[deptid],[t0].[deptname],[t0].[usercode],[t0].[companyemail],[t0].[mobilenum],[t0].[statusflag],[t0].[lastlogintime],[t0].[logintimes],[t0].[lastloginip],[t0].[resetpwdflag],[t0].[createtime],[t0].[createuser],[t0].[deleteflag],[t0].[deletetime],[t0].[deleteuser],[t0].[updateuser],[t0].[updatetime],[t0].[remark]

from [adm_user] as [t0] with(nolock)

where ([t0].[userid] = @p0)

parametername:@p0 value:1 dbtype:int32

可以看出生成的查詢語句,會自動將引數資訊自動轉化為parameter,這樣也有效杜絕sql注入式攻擊

with(nolock)這個功能是後續新增的功能,稍候會補充**可以修改時面的內容

回到dms當中,我們可以看到引數說明資訊

create方法有四個引數資訊

string bdatabase, bool bneedparams, bool bwithlock, bool bneedqueryprovider

/// /// dms查詢引擎建立

///

/// 型別引數必須是引用型別;這一點也適用於任何類、介面、委託或陣列型別。

/// 資料庫名稱

/// 否使用引數形式生成sql

/// 是否反向定義with(noclock)

///

/// dms^t

1.create可以加入bdatabase資料庫名稱,此引數會自動在表上面加入資料庫的說明,預設為空(暫只測試過mssql)

2.bneedparams是否使用引數的形式去解析sql,預設為true

3.bwithlock 是否反向定義生成with(nolock)字段,這個是根據資料庫配置去生成些查詢方式的,預設為false,如果為true,資料庫配置xml如果設定成需要nolock的話,剛這裡就不會生成,反之亦然。

4.bneedqueryprovider此引數本身是為了做列許可權去寫的框架,具體使用後續說明。。。。

那我們查詢一些更複雜的例子呢

var query = dms.create()

.where(q => q.username.like("admin"))

.select(q => q.columns(q.userid, q.username))

解析如下:

select [t0].[userid],[t0].[username]

from [adm_user] as [t0] with(nolock)

where ([t0].[username] like @p0)

parametername:@p0 value:%admin% dbtype:ansistring

可以看出where條件裡面支援很多最基本的查詢,此處注意q.columns這個寫法也是區別linq的一些寫法的。如ef框架就不是這麼寫的。

目前where條件方法支援有 greaterthan | >, greaterthanorequal | >=,lessthan | <,lessthanorequal | <=,like | like %$%, notlike | not like %$%,

beginwith | like $%,finishwith | like %$,in | in(params array),notin | not in查詢的方法

基本上大部分的方法在這裡都是支援的。greaterthan 這些大於小於方法適用於string型別,如果是數字型別,比如int,是可以直接使用 > < 號的

另:where條件字段支援:isnull | is null, isnotnull | is not null, replace | replace(mssql),substring | substring(mssql),newid | newid(),

等特殊方法。

var query = dms.create()

.where(q => q.username.like("admin"))

.select(q =>new

);

解析如下:

select [t0].[userid], substring([t0].[username],1,2)  as [username] 

from [adm_user] as [t0] with(nolock)

where ([t0].[username] like @p0)

parametername:@p0 value:%admin% dbtype:ansistring

分頁寫法:

conditionresultuserlist = dms.create()

.where(a => a.username.like("

1111

") && a.usercode == "

1122")

.orderby(q =>q.orderby(q.userid))

.pager(

1, 2).toconditionresult(0);

conditionresult的資訊裡面包括這裡面總共有多少條資料(分頁前),list帶有結果集裡的東西。。。

其它寫法:

var userlist = (from a in dms.create()

where a.userid == 1 && a.username.like("1"

)

select a);

inner join 寫法:

var query = dms.create()

.join(dms.create

(), (x, y) => x.userid ==y.rightsid,

(x, y) => new

);

另外還支援leftjoin,rightjoin,寫法相近,這裡就不舉例了.

查詢結果函式有:

tolist--返回結果集資訊,支援任意類,以類屬性自動給值,引數有幾個,1.是否啟用快取,2.返回條數,3.對屬性是否忽略大小寫進行賦值

toconditionresult--返回分頁結果集資訊

toresult--返回datatable資料,如果沒有實體也沒有關係的.只要返回datatable,想怎麼處理就怎麼處理,呼呼..

從上可以看出,select查詢是支援匿名寫法的。生成的sql語句如上,列查詢的方式也加了乙個sql函式

以上是這章的一些查詢的例子。。暫先到這了。。

新上傳dmsframe版本檔案:

DMSFrame 之簡單用法(二)

上次說了下dmsframe的一些查詢方式,之前也有好多朋友問了下這個orm與ef有什麼樣的區別。要論區別,我自己也總結了幾點。如果有其它朋友知道的,可以回覆補充下。1.不需要編輯的時候需要再次查詢資料庫,可以直接根據條件去更新。2.支援分布式資料庫,可以在實體上定義資料庫,甚至可以在 上定義資料庫。...

mysql的簡單用法 mysql簡單用法

刪除使用者 drop user jack drop比delete刪除的優勢在於drop可以刪除使用者的許可權,更加徹底 更改使用者名稱 rename user jack to jacknew 使用者的都存在與user表中,更改名稱,許可權不變 更改使用者密碼 update mysql.user se...

shell簡單用法筆記(一)

一 linux中主要用的bash shell 檢視linux系統中支援的shell種類可用 vim etc shell 執行shel腳步的方式 1 賦予腳步可執行許可權,使用相對或絕對路徑呼叫該指令碼 chmod 755 test.sh 賦予該指令碼可執行許可權 test.sh 以相對路徑執行該命令...