在需求中,資料庫有兩張表user,admin。我們要查詢裡面的id,name等資訊通常都是寫兩個dao,然後分別給每個查詢欄位寫一套方法。
然而其實查詢這些欄位的方法都大同小異,所以產生了乙個更好的解決辦法,就是寫乙個通用的dao,然後把相同的方法寫在通用的dao(genericdao)裡,然後然實體dao去繼 承它。
下面通過模擬 貼出一般做法 和 優化後的做法:
首先 在資料庫裡建好兩張表,分別為user和admin,再插入一些資料
create table user(
id int primary key,
username varchar(20),
age int
);create table admin(
id int primary key,
adminname varchar(20),
status_ int
); insert into user values(1,'李四',21);
insert into user values(2,'張三',20);
insert into admin values(1,'超級管理員',1);
insert into admin values(2,'普通管理員',0);
截下來寫兩個實體類
public class admin
public int getid()
public void setid(int id)
public string getadminname()
public void setadminname(string adminname)
public int getstatus_()
public void setstatus_(int status_)
@override
public string tostring()
}
public class user
public int getid()
public void setid(int id)
public string getusername()
public void setusername(string username)
public int getage()
public void setage(int age)
@override
public string tostring()
}
public class admindao);
} catch (sqlexception e) }
@test
public void testid()
}
public class userdao extends genericdao);
} catch (sqlexception e)
} @test
public void testid()
}
首先寫乙個genericdao
**
* 通用的dao方法
* @author administrator
* */
public class genericdao
public t getbyid(int id)
); } catch (sqlexception e)
}}
然後讓實體dao類分別繼承它
public class admindao extends genericdao
@test
public void testid()
}
public class userdao extends genericdao
@test
public void testid()
}
generic類
/**
* 通用的dao方法
* @author administrator
* */
public class genericdao
public t getbyid(int id)
); } catch (sqlexception e)
}}
簡化後的dao類
public class userdao extends genericdao
}
public class admindao extends genericdao
}
得出結論:子類繼承父類,並傳乙個實際型別給父類,父類可以在類中通過反射技術先獲得引數化型別,再獲得引數化型別中的實際型別。即***.class
java反射 列舉 泛型
1.呼叫反射的三種方法 2.class.forname 動態編譯 3.反射獲得方法 構造方法 成員變數 4.反射獲得mehtod再用invoke呼叫方法 5.反射是編譯之後的 注意 list泛型的限定作用只在編譯階段起作用,其目的只是為了防止程式設計師在寫 的時候放入了錯誤型別的元素,當編譯完成後,...
泛型反射技巧總結
本文為一些泛型反射技巧的簡單羅列,為日後的文章做準備。1 如何獲得乙個封閉構造型別 closed constructed type 的type物件?假設有如下的型別 class testtype class testtype 如果要獲得封閉構造型別的type物件,那麼只需要用c 的typeof運算子...
Java 泛型總結
泛型指引數化型別的能力,可以定義帶泛型型別的類或方法,隨後編譯器會用具體的型別來替換它。在泛型產生之前,像集合的訪問都是靠強制型別轉換 public class arraylist public void add object o string filename string names.get 0...