1. 程式人生 > >基於spring註解,泛型的使用

基於spring註解,泛型的使用


/**
 * Service基類,所有Service均繼承該類
 *
 */
public abstract class BaseService<T> {

    /* 所有子類直接通過該SQLSession操作資料庫 */
    @Resource(name = "sqlSession")
    protected SqlSession sqlSession;

    protected Class<T> clazz;

    protected  String DOMAIN_NAME;

    /* 用於記錄日誌 */
    protected Logger logger=null
; @SuppressWarnings("unchecked") @PostConstruct public void postConstruct(){ try { Type type= this.getClass().getGenericSuperclass(); ParameterizedType parameterizedType=(ParameterizedType) type; clazz= (Class<T>) parameterizedType.getActualTypeArguments()[0
]; DOMAIN_NAME =clazz.getName(); } catch (Exception e) { e.printStackTrace(); clazz=null; } logger = LoggerFactory.getLogger(this.getClass()); } // base根據主鍵ID查詢方法 @Transactional(readOnly = true) public T getByID(Long id)throws Exception { try
{ return sqlSession.selectOne(DOMAIN_NAME + ".selectByPrimaryKey", id); } catch (Exception e) { logger.error("根據{}獲取{}發生錯誤:{}", id, DOMAIN_NAME,e.getMessage(), e); throw e; } } // base新增方法 @Transactional public void saveBase(T entity) throws Exception{ try { sqlSession.insert(DOMAIN_NAME+".insertSelective",entity); } catch (Exception e) { e.printStackTrace(); throw e; } } // base修改方法 @Transactional public int updateBase(T entity) throws Exception{ try{ return sqlSession.update(DOMAIN_NAME+".updateByPrimaryKeySelective",entity); }catch(Exception e){ logger.error(DOMAIN_NAME+"修改時發生錯誤:{}", e.getMessage(), e); throw e; } } // base刪除方法 @Transactional public void deleteBase(Long id) throws Exception { try { sqlSession.delete(DOMAIN_NAME + ".deleteByPrimaryKey", id); } catch (Exception e) { logger.error(DOMAIN_NAME+"刪除時發生錯誤:{}", e.getMessage(), e); throw e; } } }