使用反射實現萬能DAO(基於JDBC)
1 沒有利用反射來對資料庫進行操作
建立工具類:JDBCConnection(使用單列設計模式)
建立IBaseDao介面(Dao中常用的操作方法)
建立IStudentDao介面,讓其繼承BaseDao介面
建立ITeacherDao介面,讓其繼承BaseDao介面
建立StudentDao類,實現IStudentDao介面
建立TeacherDao類,實現IStudentDao介面
單元測試與實體類略,如果你喜歡,也可以新增一個工廠類來進行操作。在本組程式碼中,我們要關注的是IBaseDao中定義的方法,如我們這次定義的add()方法,我們通過分析程式碼,可以發現裡面的很多程式碼可以重用,只有在SQL語句與使用setString(int parameterIndex, String x)這個方法的時候有所變化。SQL中也是表名與表的欄位有所不同,如果你開發的實體類中的屬性與表中列的命名是一致的話,完全可以通過反射來進行取得屬性,然後進行字串的拼接;setString(int parameterIndex, String x)的設定,可以通過迴圈反射得到的陣列進行字串的拼接來得到get的方法,但是遇到注意的是,因為我們的Id一般不是手動設定的,為了能很好的設定對應的值,我們在開發實體類的時候,必須把Id這個屬性放到開頭。
2 使用反射對上面的程式碼進行修改
建立BaseDao類,來實現IBaseDao介面,同時記StudentDao與TeacherDao繼承它(同時還要刪除之前我們實現的add方法的實現,不然這樣就沒有什麼意義了,當然如果你不想使用在BaseDao實現的add方法,可能履寫add方法)。每個表IXXDao也不需要再繼承IBaseDao這個介面。
現在你無論新增多少表,對應的DAo只需要繼承BaseDao類,就可以實現這個表新增操作