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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

wojilu系统的ORM介绍

發布時間:2024/4/11 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wojilu系统的ORM介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

wojilu系統是一個包含了很多很多子系統的框架,當然,ORM也是其中一個很有用的系統。

wojilu ORM 盡量設計得簡單易用,從下圖可以看出,總共也就9個方法(重載方法不算)。

下面舉一些例子來演示:

findById

Article article = Article.findById( 2 );

findAll

List<Article> list = Article.findAll();

find

說明:本方法最強大,一般的查詢、搜索都使用本方法。

List<Article> list = Article.find( "Title=:t and IsDelete=:isdel" )
??? .set( "t", "" )
??? .set( "isdel", 1 )
??? .list();

List<Article> list = Article.find( "Title=:t and IsDelete=:isdel" )
??? .set( "t", "" )
??? .set( "isdel", 1 )
??? .first();?

參數化查詢說明1(id in 的特殊處理)
List<TCat> cats = db.find<TCat>( "Id in (:id1,:id2,:id3)" ) ?? ? ? ? ? ? ? ?.set( "id1", 6 ) ?? ? ? ? ? ? ? ?.set( "id2", 7 ) ?? ? ? ? ? ? ? ?.set( "id8", 8 ) ?? ? ? ? ? ? ? ?.list();——這句是對的。或者拼接ids,不使用參數化 注意,不應該是List<TCat> cats = db.find<TCat>( "Id in (:ids)" ) ?? ? ? ? ? ? ? ?.set( "ids", "6,7,8" ) ?? ? ? ? ? ? ? ?.list();——這句是錯誤的 更多說明在這里:http://www.wojilu.com/Forum1/Topic/1108
參數化查詢說明2(like語句中的特殊處理) 正確的做法是:Package.find("Status=0 and Title like?'%'+:t+'%'").set("t",t).list() 注意:不是?Package.find("Status=0 and Title like '%:t%'").set("t",t).list()——這是錯誤做法,注意區分。

?

findPage

DataPage<Article> plist = Article.findPage( "IsDelete=0" );
int rd = plist.RecordCount;
int pageCount = plist.PageCount;
string pagerBar = plist.PageBar;
List<Article> list = plist.Results;

findBySql

List<Article> list = Article.findBySql( "select * from Article" );

count

int articleCount = Article.count( "IsDelete=0" );

insert

Article article = new Article();
...
article.insert();

update

Article article = Article.findById( 2 );
article.Title = "my new title";
article.update();?

update( string property )

Article article = Article.findById( 2 );
article.Title = "my new title";
article.update( "Title" );??

updateBatch

Article.updateBatch( "set IsDelete=1", "CategoryId=2" );

delete

Article article = Article.findById( 2 );
article.delete();??

deleteBatch

Article.deleteBatch( "CategoryId=2" );

以上方法看似簡單,實際上可以對付99%的數據操作需求,尤其是第三個find方法,采用參數化查詢方式,可以做大多數事情。

另外的 1% 的需求,您可以通過 db.run 對象操作,也就是直接使用原生的sql語句。

在設計 wojilu ORM 的時候,改版了好多次,曾經的接口方法要多很多,也復雜很多。比如曾經有一個 findBy( string property, object val ) 方法,看似很有用,在實際項目中進行統計之后,才發現用到的地方極少,就砍掉了,萬一需要,您也可以通過find方法實現。

這就是 wojilu ORM 的設計原則:簡潔!簡潔!簡潔!實用!實用!實用!

wojilu ORM 配置:

同時,wojilu的ORM,如果和wojilu的緩存系統一起使用,則可以將數據庫訪問的性能達到一個極致。

?

wojilu ORM中的緩存分成兩部分:ContextCache(一級緩存)和ApplicationCache(二級緩存)。
ContextCache(一級緩存)這里的ContextCache僅僅存在于一個上下文中,具體到網站訪問上,就是頁面開始到頁面結束,之后就不存在了。雖然緩存時間是瞬間的(比如只有幾十毫秒),但也很有意義。它不是靜態緩存,作為一級緩存,在web情況下,它是放在HttpContext中的。它的特點是隨用隨棄,不用考慮緩存策略,不會給內存增加負擔,而在實戰中很有價值,比如一個很大的頁面分成了5個部分,在每個部分進行數據綁定的時候,可能出現重復的數據讀取,比如頁面頭部查詢了user,頁面中部、數據列表等也查詢了user,這些重復的查詢都會默認直接從ContextCache中讀取。如果是自己手寫sql,往往就要細心避免這里的sql重復查詢問題。
ApplicationCache(二級緩存)能長時間存在于內存中,作為二級緩存,往往是為了應付性能方面的壓力。
ContextCache基本上是必須的、默認的,而ApplicationCache則需要根據實際的應用場景來實施。通常情況下,只有從一級緩存中檢索不到數據,才去二級緩存中繼續檢索,如果二級緩存中也沒有,才去數據庫讀取。
一級緩存是默認自動開啟的,你不需要管他。
二級緩存需要手動打開。對于一個網站來說,最容易看出優化效果的,是二級緩存。它的主要目的就是實現透明緩存,所謂“透明緩存”,也就是不需要手工控制緩存的失效或過期,由ORM自動管理。 實現“透明緩存”的關鍵之處在于,在啟用了ApplicationCache之后,每次查詢出數據并加入緩存的時候,同時也緩存一個加入時間的時間戳
我們以 ApplicationPool(對象緩存池) 為例,當將一個對象加入緩存的時候—— ? ? ? ? public void Add( IEntity obj ) {
? ? ? ? ? ? if (obj == null) return;
? ? ? ? ? ? String key = CacheKey.getObject( obj.GetType(), obj.Id ); ? ? ? ? ? ? addToApplication( key, obj ); ? ? ? ? ? ? CacheTime.updateObject( obj ); // 加入緩存的時候,設置最新 timestamp ? ? ? ? }
除了將對象放入緩存 addToApplication ,還保存了一個時間戳 CacheTime.updateObject( obj ) 。有了這個時間戳,那么,ORM就會知道哪些對象是更新過的,哪些對象是沒有更新過的。在對象更新或刪除的時候,會讓緩存的對象刷新時間戳,比如在 UpdateOperation 中—— CacheTime.updateTable( entityInfo.Type ); 表明這個對象已經被更新過了,所以下次客戶端再檢索就不會從緩存中取過期的對象。
對于一系列對象的列表,會在緩存中維護一個對象的id的列表,而不是直接將List<Object>放進去,請看 ApplicationPool 的 addList 方法, ? ? ? ? ? ? List<int> ids = new List<int>(); ? ? ? ? ? ? foreach (IEntity obj in objList) ids.Add( obj.Id ); ? ? ? ? ? ? addToApplication( key, ids );
緩存中存放的是 ids。
總結一下:二級緩存的好處有兩個:一是大幅度提高性能,降低數據庫壓力,不用重復查詢數據庫;二是全自動管理緩存,避免手工管理緩存的復雜度和bug。


關于ORM中啟用數據庫事務的介紹:? http://www.cnblogs.com/TextEditor/archive/2011/06/25/2090401.html

轉載于:https://www.cnblogs.com/TextEditor/archive/2011/06/26/2090389.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的wojilu系统的ORM介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲一区二区三区久久 | 天堂在线www | 欧美tv| 日韩啊v | 婷婷伊人综合 | 日韩免费网址 | 亚洲图区欧美 | 亚洲啪啪网 | 精品视频在线看 | 大胸喷奶水www视频妖精网站 | 国产美女一级视频 | 日韩精品视频在线观看免费 | 免费人成视频在线播放 | 欧美三级视频网站 | 国产精品成人电影在线观看 | 久久一区二区三区四区五区 | 亚洲黄色av | 黑人巨大精品人妻一区二区 | 免费一区二区三区四区 | 国产精品久久久久久久久免费 | 伊人av综合| 无码人妻av免费一区二区三区 | 欧美另类极品videosbest使用方法 | 丁香婷婷一区二区三区 | 在线视频日本 | 香蕉视频在线免费播放 | 男人和女人日批视频 | 国产福利免费在线观看 | 91女人18毛片水多国产 | 国产成人精 | av天天草 | 中文字幕一区在线播放 | 成人软件在线观看 | 亚洲国产麻豆 | 午夜精品久久久久久毛片 | 国产高清无密码一区二区三区 | 自拍亚洲综合 | 日韩v欧美| 丁香婷婷在线观看 | 亚洲va在线观看 | 综合狠狠开心 | 口爆吞精一区二区三区 | 40到50岁中老年妇女毛片 | 男人猛进女人爽的大叫 | 无码国产精品一区二区免费式直播 | 国产成人精品一区二区三区网站观看 | 一级黄色a毛片 | 人妻丰满熟妇av无码区hd | 一区二区不卡av | 欧美视频在线一区 | 免费成人在线看 | 雨宫琴音一区二区三区 | 波多野结衣视频观看 | 想要xx视频 | 久操久操| 国产清纯白嫩初高中在线观看性色 | 亚洲狠狠婷婷综合久久久久图片 | 亚洲AV无码一区二区三区蜜桃 | 深夜国产视频 | 成年人黄色大全 | 欧美人与性动交α欧美片 | 激情天堂网 | 亚洲精品中文字幕乱码无线 | 91黄视频在线观看 | 免费黄网站在线 | 丁香花电影免费播放电影 | 一区二区在线 | 制服丝袜一区在线 | 泰剧19禁啪啪无遮挡 | 国产综合精品一区二区三区 | 国产精品av一区二区 | 免费国产在线观看 | 人妻在线一区二区 | 国产精品igao视频 | 日本少妇中文字幕 | 成人免费毛片男人用品 | 色噜噜狠狠一区二区 | 91在线一区 | 网站一区二区 | 久草新视频 | 婷婷久久久| 依人成人网 | 亚洲伊人av| 干b视频在线观看 | 岳乳丰满一区二区三区 | 97精品久久久 | 黑森林福利视频导航 | 日韩av毛片 | 欧美色图久久 | 日本不卡一二三 | 日韩欧美99 | 麻豆91茄子在线观看 | 丁香婷婷在线观看 | 波多野结衣在线视频免费观看 | 黄色一级视屏 | 三度诱惑免费版电影在线观看 | 激情 亚洲 | 尹人香蕉| 欧美一区欧美二区 |