要抽离DAO层,可以遵循以下步骤:
定义实体类
首先定义与具体业务相关的实体类,该实体类应该与具体数据库表结构一一对应,属性名与表字段名相同。
定义接口
定义对该实体类进行增删改查的接口,常见的CRUD(Create, Read, Update, Delete)操作。
创建DAO接口
为每个实体类创建一个DAO接口,定义对该实体类的基本操作方法。
实现DAO接口
创建一个通用的DAO实现类,该类实现所有定义的DAO接口,并使用泛型来处理不同的实体类。
使用泛型父类
在DAO实现类中,使用泛型来接收运行时判断的业务对象类型,从而实现对不同实体类的操作。
实体类
```java
public class User {
private Long id;
private String name;
private Integer age;
// getters and setters
}
```
DAO接口
```java
public interface UserDao {
User findById(Long id);
List void insert(User user); void update(User user); void delete(Long id); } ``` DAO实现类 ```java import java.lang.reflect.ParameterizedType; import java.util.List; public class BaseDaoImpl private Class @SuppressWarnings("unchecked") public BaseDaoImpl() { ParameterizedType pt = (ParameterizedType) getClass().getGenericSuperclass(); entityClass = (Class } @Override public T findById(Long id) { // 实现根据ID查找实体的逻辑 return null; } @Override public List // 实现查找所有实体的逻辑 return null; } @Override public void insert(T entity) { // 实现插入实体的逻辑 } @Override public void update(T entity) { // 实现更新实体的逻辑 } @Override public void delete(Long id) { // 实现删除实体的逻辑 } } ``` 使用示例 ```java public class UserService { private UserDao userDao = new BaseDaoImpl<>(); public User getUserById(Long id) { return userDao.findById(id); } public List return userDao.findAll(); } public void addUser(User user) { userDao.insert(user); } public void updateUser(User user) { userDao.update(user); } public void deleteUser(Long id) { userDao.delete(id); } } ``` 通过这种方式,你可以将DAO层与Service层剥离,使得代码结构更加清晰,易于维护和扩展。