汎用ベースのBaseDao、BaseServiceの拡張版
3077 ワード
ステップ1:インタフェースBaseDaoの作成
ステップ2:基本実装クラスBaseDaoImplの作成
注意:AbstraactEntityは、汎用エンティティの抽象親です.たとえば、汎用フィールドを定義できます.
ステップ3:BaseServiceの作成
ステップ4:BaseServiceImplの作成
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);
}
}
注意:AbstraactEntityは、汎用エンティティの抽象親です.たとえば、汎用フィールドを定義できます.
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の作成
@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;
}
}