最近在做專案時,頻繁的使用增刪改,把大量時間花費在寫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 ...