在Java中,DAO(Data Access Object)是一种设计模式,用于将低级数据访问逻辑或操作从高级业务服务中分离出来。以下是一些常见的DAO设计模式:
public interface GenericDao<T, ID> {
T findById(ID id);
List<T> findAll();
void save(T entity);
void update(T entity);
void delete(T entity);
}
public class GenericDaoImpl<T, ID> implements GenericDao<T, ID> {
// 实现方法
}
public interface DaoFactory {
<T> GenericDao<T, ?> getDao(Class<T> clazz);
}
public class JdbcDaoFactory implements DaoFactory {
// 实现方法
}
public class CompositeDao implements GenericDao<Entity, Long> {
private List<GenericDao<Entity, ?>> daos;
public CompositeDao(List<GenericDao<Entity, ?>> daos) {
this.daos = daos;
}
@Override
public Entity findById(Long id) {
for (GenericDao<Entity, ?> dao : daos) {
Entity entity = dao.findById(id);
if (entity != null) {
return entity;
}
}
return null;
}
// 其他方法实现
}
public abstract class AbstractDao<T, ID> implements GenericDao<T, ID> {
@Override
public List<T> findAll() {
// 默认实现
}
@Override
public void save(T entity) {
// 默认实现
}
// 抽象方法,由子类实现
protected abstract T findById(ID id);
protected abstract void update(T entity);
protected abstract void delete(T entity);
}
public class DaoSingleton {
private static DaoSingleton instance;
private GenericDao<Entity, Long> dao;
private DaoSingleton() {
dao = new GenericDaoImpl<>();
}
public static synchronized DaoSingleton getInstance() {
if (instance == null) {
instance = new DaoSingleton();
}
return instance;
}
public GenericDao<Entity, Long> getDao() {
return dao;
}
}
@Service
public class BusinessService {
private final GenericDao<Entity, Long> dao;
@Autowired
public BusinessService(GenericDao<Entity, Long> dao) {
this.dao = dao;
}
// 业务方法
}
这些设计模式可以根据具体的需求和场景进行组合和扩展,以实现高效、灵活和可维护的数据访问层。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。