Java DAO 数据库

介绍

在现代软件开发中,数据库是一个非常重要的组件。它允许我们存储和管理数据,以及进行各种数据操作,如查询、插入、更新和删除。在 Java 中,我们可以使用 DAO(Data Access Object)设计模式来访问和操作数据库。本文将介绍什么是 DAO、如何在 Java 中使用 DAO 访问数据库,并提供代码示例来演示这一过程。

DAO 设计模式

DAO 设计模式是一种常用的面向对象设计模式,它的主要目的是将数据访问逻辑与业务逻辑分开。它提供了一个抽象的接口,用于定义对数据的访问方法,然后在实现类中实现这些方法来操作具体的数据源,如数据库。

使用 DAO 设计模式的主要优点是可以降低代码的耦合性,使得数据访问逻辑独立于业务逻辑。这样,当我们需要更换数据库或者进行其他数据源的切换时,只需要修改 DAO 实现类而不需要修改业务逻辑。此外,DAO 设计模式还提供了代码重用的机制,我们可以在多个地方使用相同的 DAO 接口来访问和操作数据。

使用 DAO 访问数据库

在 Java 中,我们可以使用 JDBC(Java Database Connectivity)来访问和操作数据库。JDBC 是 Java 提供的一套标准接口,用于连接和操作各种类型的数据库。下面我们将通过一个简单的示例来演示如何使用 DAO 访问数据库。

首先,我们需要定义一个 DAO 接口,用于定义对数据的访问方法。例如,我们可以定义一个 UserDao 接口,用于访问和操作用户数据。

public interface UserDao {
    User findById(int id);
    List<User> findAll();
    void save(User user);
    void update(User user);
    void delete(int id);
}

接下来,我们需要实现这个接口,我们可以选择使用原生的 JDBC API 来实现这些方法,也可以使用一些开源的框架如 Spring JDBC、MyBatis 等。这里我们以原生的 JDBC 为例来实现这些方法。

public class JdbcUserDao implements UserDao {
    // 数据库连接相关的代码
    
    @Override
    public User findById(int id) {
        // 查询数据库并返回结果
    }
    
    @Override
    public List<User> findAll() {
        // 查询数据库并返回结果
    }
    
    @Override
    public void save(User user) {
        // 插入数据到数据库
    }
    
    @Override
    public void update(User user) {
        // 更新数据库中的数据
    }
    
    @Override
    public void delete(int id) {
        // 从数据库中删除数据
    }
}

在实际应用中,我们通常会将数据库连接的相关代码抽取出来放到一个单独的类中,以便复用和管理。

public class DatabaseUtil {
    // 数据库连接相关的代码
    
    public static Connection getConnection() {
        // 获取数据库连接
    }
    
    public static void closeConnection(Connection conn) {
        // 关闭数据库连接
    }
    
    // 其他数据库操作相关的方法
}

以上就是使用 DAO 访问数据库的基本流程。我们可以根据具体的业务需求来定义和实现 DAO 接口。在实际应用中,我们还可以添加一些其他的方法和功能,如分页查询、条件查询等。

类图

下面是一个简单的类图,展示了上述示例中的相关类和它们之间的关系。

classDiagram
    class UserDao {
        +findById(int id)
        +findAll()
        +save(User user)
        +update(User user)
        +delete(int id)
    }
    
    class JdbcUserDao {
        +findById(int id)
        +findAll()
        +save(User user)
        +update(User user)
        +delete(int id)
    }
    
    class User {
        -id: int
        -name: String
        -email: String
        +getId()
        +getName()
        +getEmail()
        +setId(int id)
        +setName(String name)
        +setEmail(String email)
    }
    
    class DatabaseUtil {
        +getConnection()
        +closeConnection(Connection conn)
    }
    
    UserDao <|-- JdbcUser