第 1 步:编写接口 baseDao
public interface baseDao>{ boolean save(T u); boolean deleteById(ID id); boolean update(T u); T getById(ID id); List getAll();}
第 2 步:编写基本实现类 baseDaoImpl
@SuppressWarnings("all")public abstract class baseDaoImpl> implements baseDao{ @Resource(name = "sqlSessionFactory") protected SqlSessionFactory sqlSessionFactory; private Class curDao; public baseDaoImpl() { ParameterizedType pt = (ParameterizedType)getClass().getGenericSuperclass(); this.curDao = ((Class)pt.getActualTypeArguments()[2]); } @Override public boolean save(T u) { return getMapper().save(u); } @Override public boolean deleteById(ID id) { return getMapper().deleteById(id); } @Override public boolean update(T u) { return getMapper().update(u); } @Override public T getById(ID id) { return getMapper().getById(id); } @Override public List getAll() { return getMapper().getAll(); } protected SqlSession getSession() { return sqlSessionFactory.openSession(); } protected I getMapper() { return getSession().getMapper(curDao); }}注:AbstractEntity为通用实体抽象父类,可用于定义通用的字段,例如
public abstract class AbstractEntity implements Serializable{ private static final long serialVersionUID = 66532814011080848L; private Long id; //创建时间 private Date createDate; //修改时间 private Date modifyDate; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getModifyDate() { return modifyDate; } public void setModifyDate(Date modifyDate) { this.modifyDate = modifyDate; }}第 3 步:编写 baseService
public interface baseService>{ boolean save(T u); boolean deleteById(ID id); boolean update(T u); T getById(ID id); List getAll();}
第 4 步:编写 baseServiceImpl
@Transactionalpublic abstract class baseServiceImpl> implements baseService{ private baseDao baseDao; @Override public boolean save(T u) { if (u != null && u.getCreateDate() == null) { u.setCreateDate(new Date()); } if (u != null && u.getModifyDate() == null) { u.setModifyDate(new Date()); } return baseDao.save(u); } @Override public boolean deleteById(ID id) { return baseDao.deleteById(id); } @Override public boolean update(T u) { if (u != null && u.getModifyDate() != null) { u.setModifyDate(new Date()); } return baseDao.update(u); } @Override public T getById(ID id) { return baseDao.getById(id); } @Override public List getAll() { return baseDao.getAll(); } public void setbaseDao(baseDao baseDao) { this.baseDao = baseDao; }}