日韩性视频-久久久蜜桃-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介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美性xxxxxx| 两个小y头稚嫩紧窄h文 | 欧美久草| 91亚洲国产成人久久精品麻豆 | 在线成年人视频 | 激情久久综合 | 69av在线播放 | 国产一级做a爰片在线看免费 | 亚洲色图狠狠干 | 成人毛片一级 | 老女人黄色片 | h网站在线看 | а中文在线天堂 | 中文字幕一区二区三区精华液 | 日本高清不卡一区 | 中文字幕一区二区三区在线观看 | 日韩福利视频 | 久久久成人精品一区二区三区 | 亚洲熟女www一区二区三区 | 熟妇毛片 | 高潮毛片| 国产一区二区在线观看视频 | 亚洲v欧美| 在线观看日韩av | 日本大奶少妇 | 我爱avav色aⅴ爱avav | 四虎国产精品成人免费入口 | 亚洲www久久久 | 久久久激情网 | 国产精品tv| 四虎国产在线观看 | 欧美黄色a级片 | 精品国产一区一区二区三亚瑟 | 亚洲精品久久久久久久蜜桃 | 啪啪在线视频 | 91综合国产 | 99在线视频观看 | 美女校花脱精光 | 男女在线观看 | 另类一区| 久久性色av | 在线观看视频色 | 久久久无码一区二区三区 | 人妻无码中文字幕免费视频蜜桃 | 少妇捆绑紧缚av | 熟妇高潮一区二区高潮 | 岛国av在线 | 一级黄色短视频 | 中文字幕在线播放视频 | 免费观看在线播放 | 91福利影院 | 精品久久一区二区三区 | 极品探花在线播放 | 亚洲色图一区二区三区 | 亚洲永久精品一区二区 | 久久偷拍免费视频 | 叶全真三级 | 五月激情六月婷婷 | 日韩精品免费一区二区 | 91青青青 | 7777av| 丰满少妇高潮一区二区 | 2024国产精品 | 久久中文网 | 亚洲一线二线在线观看 | 国外成人性视频免费 | 99亚洲视频 | 波多野一区二区三区 | 国产欧美精品在线 | 一本—道久久a久久精品蜜桃 | missav|免费高清av在线看 | 狠狠干夜夜骑 | 激情综合一区二区三区 | 在线看免费 | 亚洲自拍偷拍欧美 | 国产中文字幕一区 | av资源站 | 男人的天堂99 | 女人的天堂av在线 | 免费久久 | 6—12呦国产精品 | 日日夜夜国产精品 | 精品无码av一区二区三区 | 日韩成人一区二区视频 | 91亚洲精品一区二区乱码 | 国产偷拍一区二区三区 | 滋润少妇h高h | 69色堂 | 超碰91在线观看 | 生活片一级片 | 五月网 | 久久夜色精品国产欧美乱 | 成人欧美一区二区 | 国产传媒一区 | www黄色网 | 无码精品视频一区二区三区 | 国产99久久久国产精品成人免费 | 嫩草网站在线观看 | 天天色宗合 |