運用泛型實現增刪改

2022-03-08 14:43:41 字數 3105 閱讀 2459

最近在做專案時,頻繁的使用增刪改,把大量時間花費在寫sql語句和引數上,就想能不能寫乙個通用的方法省略掉寫sql 和引數。想了一段時間,想到.net裡面有attitude類,可以自定義屬性,這樣就可以根據自定義屬性獲取sql欄位和引數名,然後構造出sql語句和sqlparamertes ,要想根據不同表的增刪改,可以用泛型實現。

首先定義乙個繼承自attribute的自定義類:entry包括 資料庫列名、引數名、引數長度、引數型別、是否包括改欄位屬性。

**如下:

**public

class

entry:attribute

set}

//////

引數名///

private

string

paramname;

public

string

paramname

set}

//////

引數型別

///private

sqldbtype paramtype;

public

sqldbtype paramtype

set}

//////

引數大小

///private

intparamlength;

public

intparamlength

set}

//////

是否加入實體

///private

bool

show

=true

;public

bool

show

set}

public

entry() 

public

entry(

string

colname, sqldbtype paramtype)

public

entry(

string

colname, 

string

paramname, sqldbtype paramtype)

public

entry(

string

colname, 

string

paramname, sqldbtype paramtype, 

intparamlength)

public

entry(

string

colname, 

string

paramname, sqldbtype paramtype, 

intparamlength, 

bool

show)

}接下來就是根據自定類動態構造增加資料的方法。要想獲取自定義屬性,可以採用反射機制獲取欄位名,引數名,引數長度等資訊。

下面四泛型實現的新增資料的add方法

**public

static

void

add<

t>

(t entity, 

string

tablename) 

where

t : 

class

, new()}

}stringbuilder sbuilder 

=new

stringbuilder();

string

fieldsql 

=string

.empty;

string

paramsql 

=string

"insert into ""

(");foreach

(string

field 

infields)

fieldsql 

=fieldsql.substring(

0, fieldsql.lastindexof(',

'") values (");

foreach

(string

pn in

paramnames)

paramsql 

=paramsql.substring(

0, paramsql.lastindexof(',

'")"

);executesql(sbuilder.tostring(), parameters.toarray ());

}下面是乙個具體例子:根據自定義屬性配置引數名、引數型別等基本資訊

**public

class

folder

//////

folder name

///[entry(

"name", 

"name

", sqldbtype.nvarchar, 

32)]

public

string

name 

//////

folder parent id 

///[entry(

"parentid", 

"parentid

", sqldbtype.nvarchar, 

32)]

public

string

parentid 

//////

///[entry(

"userid", 

"userid

", sqldbtype.nvarchar, 

32)]

public

intuserid 

//////

pengding type: add/update/delete 

///public

string

type 

[entry(

"createtime", 

"createtime

", sqldbtype.datetime, 

32)]

public

datetime createtime 

}同理,delete、update可以寫出乙個通用的方法來。不過,update可能有點麻煩,很多時候只更新個別字段,這個時候就 不能把所有欄位都更新。最近工作比較忙,這個問題以後有時間再去研究。

泛型 反射 動態實現增刪改查

以add 為例項 反射的實現 getmodel 1通過assembly動態載入乙個程式集 assembly assembly assembly.load kanghui.common 2通過type獲取t型別 type type typeof t 3過型別可以建立乙個物件 t obj t activ...

模擬泛型DAO增刪改查 jdbc實現

在我之前做的的jdbc專案,引數列表中傳入的都是指定型別,一旦新增了實體類,又要重新寫乙個dao層的方法,但是功能基本都是一致的,導致 大量冗餘,可維護性極差,所以在這裡引入泛型dao來解決這個問題,規定泛型,傳入的引數可以是任意實體類,而我們在控制層可以將方法返回的泛型型別的值強轉為我們要使用的實...

陣列使用泛型來完成增刪改查操作

public class array public array public int getcapacity public int getsize public boolean isempty size是陣列的第乙個空元素的定位符。向所有元素後新增乙個新元素 public void addlast ...