第 1 步:编写接口 BaseDaopublic 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 步:编写 BaseServicepublic interface BaseService>
{
boolean save(T u);
boolean deleteById(ID id);
boolean update(T u);
T getById(ID id);
List getAll();
}
第 4 步:编写 BaseServiceImpl@Transactional
public abstract class BaseServiceImpl>
implements BaseService
{
/** 基础DAO */
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;
}
}