今天的內容對照上一節內容,上一節內容是對資料的查詢,本節主要是對資料的新增。程式入口**如下
staticadddata()方法和query()方法一樣。都是限制為where t:basemodel的泛型方法。adddata**如下所示void main(string
args)
public因為我們現在做的是新增,資料庫設計id為自增型別,所以在insert時,我們不需要新增id欄位,所以就要想辦法把id欄位過濾。解決的辦法是通過給id設定特性themekeyattribute,特性定義如下所示bool adddata(t t) where
t:basemodel
}catch
(exception ex)
return
re; }
///在特性方法裡面沒有任何實現,主要目的是用來做標記。同時,我們需要為id欄位新增上面定義的特性,如下所示///主鍵特性
/// public
class
themekeyattribute:attribute
public這樣一來,就把company實體和user屍體的id欄位加上了特性。我們需要在獲取實體屬性時,呼叫過濾主鍵方法class
basemodel
}
filter是乙個ienumerable型別那個的擴充套件方法,定義如下所示:
public在filter方法中,直接傳入當前的屬性集合型別,把標記有themekeyattribute的屬性過濾掉後再返回集合。static ienumerablefilterkey(this ienumerableprops)
在filter方法中,我們通過方法p.isdefined(typeof(themekeyattribute),true)就可以判斷乙個型別是否具有某種特性。
由於在執行adddata()方法時,我們的sql語句結構都是類似的(insert into [tab]() values('')),為了提高**執行效率,避免每次執行adddata()方法都去初始化一次sql語句,我們決定採用泛型快取的方法,定義如下乙個泛型類
using注意,要通過system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
using
theme.model;
using
theme.framework;
namespace
theme.dal
from where id=@id
", props, table);
}]() values()
", table, param, valuestr);}}
public
static
string
getsql(sqltype sqltype)
}public
enum
sqltype}}
限制當前類只能是繼承了basemodel父類的才能訪問。我們把sql語句定義成靜態字段,在每次使用該類之前,該類進行初始化生成findsql和addsql語句。這樣確保了乙個型別的物件只會初始化一次sql語句,這樣就節省了多物件呼叫反覆拼裝sql語句的問題。
為了避免sql注入問題的發生,我們通過引數化的方法拼裝sql執行語句,如下圖所示:
在具體執行sql語句時,新增一下各個引數的值,如下圖所示:
orm框架的學習mybatis
1.資料庫中的每張表,對應 中乙個pojo類。3.可以利用paramatertype指定sql語句傳進來的引數。8.orm怎樣返回list?答 通過resultmap,不是resulttype了 為了返回list 型別而定義的returnmap user id resultlistuser id p...
ORM框架,sqlsugar學習一
有時候真的是書到用時方恨少呀,今天看了一下sqlsugar的相關使用方法,自己做乙個自己的記錄,方便以後使用。記住下面的 不管不會用了就去學習一下 環境 win7,vs2015 一 當然是要安裝引用了,sqlsugar自然不必多說,此處還可以多引用乙個newtonsoft.json,這個可以幫助自己...
ORM框架試驗
public class orm 新增方法 public int add t obj columnnames columns 0 columnname 列名列表 值的列表 values common.getdbvalue columns 0 columntype,convert.tostring p...