泛型接口GenericDao
public interface GenericDao <T, ID extends Serializable>{ public T findById(ID id); T findById(ID id, boolean lock); public T load(ID id); List findAll(); List findByExample(T exampleInstance); T save(T entity); void update(T entity); void delete(T entity); }
泛型接口實現GenericDaoImpl
public abstract class GenericDaoImpl <T, ID extends Serializable> extends HibernateDaoSupport implements GenericDao <T, ID>{ private Class persistentClass; public GenericDaoImpl() { this.persistentClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } public Class getPersistentClass() { return persistentClass; } @SuppressWarnings("unchecked") public T findById(ID id) { return (T) getHibernateTemplate().get(getPersistentClass(), id); } @SuppressWarnings("unchecked") public T load(ID id){ T t = (T)getHibernateTemplate().load(getPersistentClass(), id); return t; } @SuppressWarnings("unchecked") public T findById(ID id, boolean lock) { T entity; if (lock) entity = (T) getHibernateTemplate().load(getPersistentClass(), id, LockMode.UPGRADE); else entity = findById(id); return entity; } public List findAll() { return findByCriteria(); } @SuppressWarnings("unchecked") public List findByExample(T exampleInstance) { DetachedCriteria detachedCrit = DetachedCriteria .forClass(getPersistentClass()); Example example = Example.create(exampleInstance); detachedCrit.add(example); return getHibernateTemplate().findByCriteria(detachedCrit); } @SuppressWarnings("unchecked") public List findByExample(T exampleInstance, String[] excludeProperty) { DetachedCriteria detachedCrit = DetachedCriteria .forClass(getPersistentClass()); Example example = Example.create(exampleInstance); for (String exclude : excludeProperty) { example.excludeProperty(exclude); } detachedCrit.add(example); return getHibernateTemplate().findByCriteria(detachedCrit); } public T save(T entity) { getHibernateTemplate().saveOrUpdate(entity); return entity; } public void update(T entity){ getHibernateTemplate().update(entity); } public void delete(T entity) { getHibernateTemplate().delete(entity); } @SuppressWarnings("unchecked") protected List findByCriteria(Criterion... criterion) { DetachedCriteria detachedCrit = DetachedCriteria .forClass(getPersistentClass()); for (Criterion c : criterion) { detachedCrit.add(c); } return getHibernateTemplate().findByCriteria(detachedCrit); } }
CustomersDao public interface CustomersDao extends GenericDao <Customers,Integer>{ }
CustomersDaoImpl
public class CustomersDaoImpl extends GenericDaoImpl <Customers,Integer> implements CustomersDao{ }
設計模式學習筆記 面向對象設計原則 單一職責 單一職責原則(Single Responsibility Principle, SRP):一個類只負責一個功能領域中的相應職責,或者可以定義爲:就一個類而言,應該只有一個引起它變化
1 代理模式 動態代理屬於代理模式,那究竟什麼是代理模式呢? 說白了,代理模式就是爲對象提供一個代理以控制對某個對象的訪問,原對象被稱爲委託類,這個代理的實現被稱爲代理類。代理類在爲委託類預處理消息之後會將消息轉發給委託類,之後還
相信看到這篇文字的人已經不需要了解什麼是接口了,我就不再過多的做介紹了,直接步入正題,接口測試如何編寫。那麼在這一篇裏,我們用一個例子,讓各位對這個重要的編程思想有個直觀的印象。爲充分考慮到初學者,所以這個例子非常簡單,望各位高手見諒。
概念 代理模式:爲其他對象提供一種代理以控制對這個對象的訪問 使用場景 想在訪問一個類時做一些控制; 直接訪問對象時會帶來的問題,比如說:要訪問的對象在遠程的機器上。 一般步驟 將被代理者和代理者的共同行爲抽象出來作爲一個類
概述 模板方法模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 優點: 封裝不變部分,擴展可變部分 提取公共代碼,便於維護 行爲由父類控制,子類
概念 工廠方法模式:定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。 與簡單工廠模式對比 簡單工廠模式最大優點就是工廠類中包含了必要的邏輯判斷,可以根據不同條件動態實例化相關的類,
概念 原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 原理:利用一個Clone函數來封裝了自身的拷貝構造函數,調用Clone函數時就會觸發拷貝構造。 使用場景 利用已有的一個原型對象,快速地生成和原型對
概念 裝飾模式:動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更爲靈活。 允許向一個現有的對象添加新的功能,同時又不改變其結構 優點:裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代
1. 什麼是單例模式 單例模式屬於創建者模式,一個類只有一個全局實例 2. 單例模式的角色組成 只有一個角色,就是單例角色本身 3. 代碼示例 單例模式有兩種加載模式:懶漢式創建實例,餓漢式創建實例 懶漢式創建實例 pack
http://www.w2bc.com/article/43755
文章目錄概念樣例演示定義接口:IEmployee定義接口實現A:EmployeeA定義接口實現B:EmployeeB定義中介委派實現:TeamLeader------>本質上具體的委派delegate是這個TeamLeader定義
畢業 時間從不停留,也不是回憶令人消瘦。 真的看淡了風景,也不會再有任何請求。 2020年盛夏,陳二毛畢業了。 沒有找到工作,蝸居在城市,每天爲了房租發愁。 每逢傍晚,溜達到一個湖邊,買一注彩票,然後攥得緊緊的,彷彿那是二毛的未來
概述 緩存包是mybatis對緩存的抽象和實現,可爲其他模塊提供緩存的支持。其設計也很值得借鑑。 大概分爲 緩存定義(抽象、異常、緩存鍵) 緩存實現 緩存裝飾者 可以重點在於緩存策略裝飾模式實現,可以複習複習裝飾模式啦。 C
1、 實現途徑: 編寫JdbcPool implements java.sql.DataSource類 l 靜態初始化塊 l getConnection() l release() 總結: 可以解決連接池的實現問題,但是必須要求編程人員熟
在web項目中,web.xml文件往往看到classpath和classpath*:的配置。classpath指的是WEB-INF文件夾下的classes目錄。 classes目錄是個定位資源的入口: 1、class文件的存放,