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

2021-07-25 17:56:02 字數 3630 閱讀 7693

在我之前做的的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 刪除操...