在我之前做的的jdbc專案,引數列表中傳入的都是指定型別,一旦新增了實體類,又要重新寫乙個dao層的方法,但是功能基本都是一致的,導致**大量冗餘,可維護性極差,所以在這裡引入泛型dao來解決這個問題,規定泛型,傳入的引數可以是任意實體類,而我們在控制層可以將方法返回的泛型型別的值強轉為我們要使用的實體型別,注意!這裡不要通過反射在控制層獲取實體類,多此一舉,我們要知道,使用泛型dao的目的是去冗餘,解耦,增加可維護性,我們在傳入dao層的時候,就已經知道了我們所傳入的實體類,所以直接向下轉型即可。
實體類news
public
class
news
implements
entity
實體類user
package com.test.entity;
public
class
user
implements
entity
定義乙個泛型型別的介面entity
package com.test.entity;
public
inte***ce entity
增加的方法
public int insert(entity entity)
throws introspectionexception, illegalacces***ception, invocationtargetexception, instantiationexception
// 切割最後乙個屬性的逗號
sql = sql.substring(0, sql.length() - 1);
sql += ") values ("
; // 獲取屬性的數量(多少個?)
int fieldlength = fields.length
; for (int i = 1
; i <= fieldlength; i++)
sql = sql.substring(0, sql.length() - 1);
sql += ")"
; system.out
.println(sql);
// //獲取全部的方法
// method methods = clazz.getmethods();
// listtypelist = new arraylist();
// for(method methodname : methods)
connection conn = connectionmanager.getconnection();
try else if (field1.gettype() == integer.class)
}ps.execute();
} catch (sqlexception e) catch (illegalargumentexception e)
return 0
; }
修改,因為是都是通過反射獲取屬性,方法等,千篇一律,注釋只簡略概要。
@override
public int update(entity entity)
sql += fieldname + "=?,"
; }
sql = sql.substring(0, sql.length() - 1);
// 因為預設是根據id查詢,所以直接這樣拼接
sql += " where id=?"
; connection conn = connectionmanager.getconnection();
try
i = i + 1
; propertydescriptor pd = new propertydescriptor(field1.getname(), clazz);
method getmethod = pd.getreadmethod();
object obj = (object) getmethod.invoke(entity);
if (field1.gettype() == string.class) else if (field1.gettype() == integer.class)
j = i;
}for (field field1 : field)
ps.executeupdate();
} catch (sqlexception e) catch (illegalargumentexception e) catch (introspectionexception e) catch (illegalacces***ception e) catch (invocationtargetexception e)
system.out
.println(sql);
return 0
; }
刪除
@override
public int delete(entity entity)
ps.execute();
system.out
.println(sql);
} catch (exception e)
return 0
; }
查詢
@override
public listselectall(entity entity) else if (field1.gettype() == integer.class) }}
list.add(e);
}} catch (sqlexception e) catch (illegalargumentexception e) catch (illegalacces***ception e) catch (introspectionexception e) catch (invocationtargetexception e) catch (instantiationexception e)
return list;
}
測試類
/*
* 測試新增
*/@test
public
void
testinsert()
throws illegalacces***ception, invocationtargetexception, introspectionexception, instantiationexception
/*
* 測試修改
*/@test
public
void
testupdate()
/*
* 測試刪除
*/@test
public
void
testdelete()
@test
public
void
testselectall()
}
JDBC 增刪改查
一 jdbc資料庫使用的七個基本步驟 獲取驅動 建立連線 編寫sql 獲取preparestatement 執行sql語句,並返回結果 處理結果集 關閉資源 根據這7個步驟寫 public class testuser else catch exception e 7.關閉資源 finallycat...
泛型 反射 動態實現增刪改查
以add 為例項 反射的實現 getmodel 1通過assembly動態載入乙個程式集 assembly assembly assembly.load kanghui.common 2通過type獲取t型別 type type typeof t 3過型別可以建立乙個物件 t obj t activ...
JDBC 實現增刪改查
public class notedaoimpl implements notedao catch exception e finally 修改操作 public void update note note throws exception catch exception e finally 刪除操...