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)這個功能是後續新增的功能,稍候會補充**可以修改時面的內容create方法有四個引數資訊回到dms當中,我們可以看到引數說明資訊
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 以相對路徑執行該命令...