Java 之 DAO 模式详解及代码示例
什么是 DAO 模式
DAO,即 Data Access Object,数据访问对象,是一种数据访问的设计模式。它的主要目的是将数据存储到持久化层(通常是数据库)并从数据库中检索数据。这样,就可以将业务逻辑层与数据访问层分离,从而提高系统的可维护性和可重用性。
DAO 模式主要包含以下几个组件:
- 持久层接口 (DAO):定义访问数据库所需的方法。
- 持久层实现类:实现持久层接口中的方法,对数据库进行读写。
- 实体对象:代表数据在系统中的一个实体,对应数据库中的一张表。
- 数据库连接:用于建立与数据库的连接。
DAO 模式的优点
使用 DAO 模式的主要优点如下:
- 分离了业务逻辑与数据层:DAO 模式的主要目的是将业务逻辑层与数据访问层分离,从而提高系统的可维护性和可重用性。
- 简化了代码:将数据访问逻辑与业务逻辑分离,可以让系统更容易维护和阅读。
- 提高了数据访问的安全性:通过 DAO 接口限制了对数据库的操作,避免了直接访问数据库的不安全情况发生。
DAO 模式的示例
这里我们来看两个简单的示例来说明 DAO 模式的使用。
示例一:用户 DAO 接口
// 用户 DAO 接口
public interface UserDao {
// 用户登录验证
User login(String userName, String password);
// 添加一条用户记录到数据库
boolean addUser(User user);
// 根据用户ID删除对应记录
boolean deleteUserById(String userId);
}
示例二:用户 DAO 实现
// 用户 DAO 实现
public class UserDaoImpl implements UserDao {
private Connection connection;
public UserDaoImpl(Connection connection) {
this.connection = connection;
}
@Override
public User login(String userName, String password) {
String sql = "SELECT * FROM user WHERE user_name = ? AND password = ?";
PreparedStatement ps = null;
ResultSet rs = null;
User user = null;
try {
ps = this.connection.prepareStatement(sql);
ps.setString(1, userName);
ps.setString(2, password);
rs = ps.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setRealName(rs.getString("real_name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return user;
}
@Override
public boolean addUser(User user) {
String sql = "INSERT INTO user (user_name, password, real_name) VALUES (?, ?, ?)";
PreparedStatement ps = null;
int result = 0;
try {
ps = this.connection.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getPassword());
ps.setString(3, user.getRealName());
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return result > 0;
}
@Override
public boolean deleteUserById(String userId) {
String sql = "DELETE FROM user WHERE id = ?";
PreparedStatement ps = null;
int result = 0;
try {
ps = this.connection.prepareStatement(sql);
ps.setString(1, userId);
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return result > 0;
}
}
在 DAO 实现中,我们主要是实现了 UserDao 接口中定义的方法,来对数据库进行读写。
结语
通过上述示例,我们可以看到 DAO 模式的使用,将业务逻辑层与数据访问层分离,代码可读性更高,易于维护,也更加安全。对于大型的应用系统而言,使用 DAO 模式可以有效地提高应用程序的可扩展性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之dao模式详解及代码示例 - Python技术站