ORM框架學習(二)

2022-07-20 14:36:13 字數 2108 閱讀 4451

今天的內容對照上一節內容,上一節內容是對資料的查詢,本節主要是對資料的新增。程式入口**如下

static

void main(string

args)

adddata()方法和query()方法一樣。都是限制為where t:basemodel的泛型方法。adddata**如下所示

public

bool adddata(t t) where

t:basemodel

}catch

(exception ex)

return

re; }

因為我們現在做的是新增,資料庫設計id為自增型別,所以在insert時,我們不需要新增id欄位,所以就要想辦法把id欄位過濾。解決的辦法是通過給id設定特性themekeyattribute,特性定義如下所示

///

///主鍵特性

/// public

class

themekeyattribute:attribute

在特性方法裡面沒有任何實現,主要目的是用來做標記。同時,我們需要為id欄位新增上面定義的特性,如下所示

public

class

basemodel

}

這樣一來,就把company實體和user屍體的id欄位加上了特性。我們需要在獲取實體屬性時,呼叫過濾主鍵方法

filter是乙個ienumerable型別那個的擴充套件方法,定義如下所示:

public

static ienumerablefilterkey(this ienumerableprops)

在filter方法中,直接傳入當前的屬性集合型別,把標記有themekeyattribute的屬性過濾掉後再返回集合。

在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...