標籤:
1,設計 BaseDao 與 BaseDaoImpl 1,設計介面 BaseDao 1,每個實體都應有一個對應的Dao介面,封裝了對這個實體的資料庫操作。例 實體 Dao介面 實作類別 ======================================================== User --> UserDao --> UserDaoImpl Role --> RoleDao --> RoleDaoImpl Department --> DepartmentDao --> DepartmentDaoImpl Article --> ArticleDao --> ArticleDaoImpl ... 2,在每個Dao介面中都應有一個基本的增刪改查的方法, 但每個Dao介面中都寫一遍就是重複的代碼,可以把這些方法抽取到一個父介面中,定義為: public interface BaseDao { save(entity : T) : void delete(id : Serializable) : void update(entity : T) :void getById(id : Serializable) : T getByIds(ids : Serializable[]) : List findAll() : List } 3,說明: 1,使用泛型的技術,可以在使用時更方便,如:User user = userDao.getById(1L); // 不需要強制轉型 2,getById(id : Long) 與 getByIds(ids : Long[]) 不要合并為一個有可變參數的方法, 因為那個用起來就不方便了,比如要經常使用的根據一個id擷取一個對象時就很不方便: List list = userDao.getByIds(1L); User user = list.size() > 0 ? list.get(0) : null。 3,以後再有Dao介面就可以繼承這個 BaseDao,以擁有基本的增刪改查方法,如: UserDao extends BaseDao RoleDao extends BaseDao 2,設計實作類別 BaseDaoImpl 1,每個Dao的介面還要有相應的實作類別才可以,在每個DaoImpl中都要實現Dao介面中定義的所有方法, 當然也包括公用的增刪改查方法(BaseDao中定義的6個基本方法)。 2,每個DaoImpl中都實現一遍公用方法顯然是重複的,所以也可以抽取出來為一個父類BaseDaoImpl, 在BaseDaoImpl中實現了BaseDao介面的所有方法,我們的DaoImpl只需要繼承他就可以不用重複的寫公用方法的實現了。 聲明如下: public class BaseDaoImpl implements BaseDao { @Resource private SessionFactory sessionFactory; // 讓Spring注入sessionFactory private Class clazz; // 要想辦法得到T的Class public void save(T entity) { } public void delete(Long id) { } public void update(T entity) { } public T getById(Long id) { } public List getByIds(Long[] ids) { } public List findAll() { } } 在實現方法時,擷取Session的代碼為:sessionFactory.getCurrentSession() 3,在擷取clazz時有兩種方法 1,方法一: 1,把clazz聲明成protected修飾符的,這樣子類中就可以訪問了, 2,在每個子類的構造方法中傳遞這個屬性的值,如: public RoleDaoImpl() { clazz = Role.class; } public UserDaoImpl() { clazz = User.class; } 2,方法二:使用反射的方式: 1,在BaseDaoImpl的預設構造方法中寫如下代碼就可以了: ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); clazz = (Class) pt.getActualTypeArguments()[0]; 2,說明:BaseDaoImpl不能直接使用,只能使用他的子類,否則這段代碼就無效了。 1,設計實體/表 設計實體 --> JavaBean --> hbm.xml --> 建表 2,分析有幾個功能,對應幾個請求。 3,實現功能: 1,寫Action類,寫Action中的方法,確定Service中的方法。 2,寫Service方法,確定Dao中的方法。 3,寫Dao方法。 4,寫JSP ============================ 請求數量 地址欄 轉寄 1 不變 重新導向 2 變化 增刪改查共4個功能,需要6個請求。 所以需要相應的6個Action方法,每個Action方法處理一種請求。 作用 方法名 傳回值 對應的頁面 ---------------------------------------------------- 列表 list() list list.jsp 刪除 delete() toList 添加頁面 addUI() addUI addUI.jsp 添加 add() toList 修改頁面 editUI() editUI editUI.jsp 修改 edit() toList role_list -------------------------------------------------------------------------------------------------------- 筆記: 設計公用介面及其實作類別 公用介面中有公用方法(增刪改查),使用泛型,不指定類型 實作類別implements公用介面,實現公用介面中的方法增刪改查(class BaseDaoImpl implements BaseDao) 設計實體/表 設計實體 --> JavaBean --> hbm.xml --> 建表 分析有幾個功能,對應幾個請求。 實現功能: 1,寫Action類,寫Action中的方法,確定Service中的方法。 2,寫Service方法,確定Dao中的方法。 3,寫Dao方法。 4,寫JSP 將對象放到值棧的map中(jsp中用#擷取值):ActionContext.getContext().put("roleList", roleList); 添加資訊方法: //1,封裝到對象中 Role role=new Role(); role.setName(model.getName()); role.setDescription(model.getDescription()); //2,儲存到資料庫 roleService.save(role); //或直接儲存 return "toList"; 編輯資訊頁面儲存方法: 將對象儲存到對象棧中:ActionContext.getContext().getValueStack().push(role); 擷取棧對象: public Role getModel(){ return model; }
OA項目筆記-從建立介面 dao impl action jsp等架構實現crud