什么是DAO模式?
DAO(Data Access Object)模式是一种设计模式,主要用于将数据访问逻辑与业务逻辑分离。它提供了一种抽象接口,用于访问数据源(如数据库、文件系统或其他持久化存储),使得应用程序的其他部分不需要直接与数据源交互。DAO模式的主要目的是提高代码的可维护性、可测试性和可重用性。
下面是一个简单的 DAO 模式的示例,假设我们有一个用户(User)对象,并希望通过 DAO 来管理用户数据。
public class User {
private int id;
private String name;
private String email;
// 构造函数
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getter 和 Setter 方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
import java.util.List;
public interface UserDao {
void addUser(User user);
User getUser(int id);
List<User> getAllUsers();
void updateUser(User user);
void deleteUser(int id);
}
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
private List<User> users = new ArrayList<>();
@Override
public void addUser(User user) {
users.add(user);
}
@Override
public User getUser(int id) {
return users.stream().filter(user -> user.getId() == id).findFirst().orElse(null);
}
@Override
public List<User> getAllUsers() {
return users;
}
@Override
public void updateUser(User user) {
User existingUser = getUser(user.getId());
if (existingUser != null) {
existingUser.setName(user.getName());
existingUser.setEmail(user.getEmail());
}
}
@Override
public void deleteUser(int id) {
users.removeIf(user -> user.getId() == id);
}
}
public class Main {
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
// 添加用户
userDao.addUser(new User(1, "Alice", "[email protected]"));
userDao.addUser(new User(2, "Bob", "[email protected]"));
// 获取用户
User user = userDao.getUser(1);
System.out.println("User ID: " + user.getId() + ", Name: " + user.getName());
// 更新用户
userDao.updateUser(new User(1, "Alice Smith", "[email protected]"));
// 获取所有用户
List<User> allUsers = userDao.getAllUsers();
allUsers.forEach(u -> System.out.println("User ID: " + u.getId() + ", Name: " + u.getName()));
// 删除用户
userDao.deleteUser(2);
}
}
DAO模式通过提供一个抽象层来管理数据访问,使得代码更加模块化和可维护。通过将数据访问逻辑与业务逻辑分离,开发者可以更容易地管理和测试代码。