Java with MySQL-Thực thi lớp DAO

Trong mô hình DAO, lớp implement DAO sẽ thực hiện các thao tác truy vấn cơ sở dữ liệu. Các thao tác này bao gồm thêm, sửa, xoá và lấy dữ liệu từ cơ sở dữ liệu.

Ví dụ, nếu bạn muốn thêm một người dùng mới vào cơ sở dữ liệu, bạn sẽ viết một phương thức trong lớp implement DAO để thêm người dùng mới.

Dưới đây là một ví dụ về lớp implement DAO trong Java với MySQL:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements UserDao {

    private Connection connection;

    public UserDaoImpl(Connection connection) {
        this.connection = connection;
    }

    @Override
    public void addUser(User user) throws SQLException {
        String query = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setString(1, user.getUsername());
        ps.setString(2, user.getPassword());
        ps.setString(3, user.getEmail());
        ps.executeUpdate();
        ps.close();
    }

    @Override
    public void updateUser(User user) throws SQLException {
        String query = "UPDATE users SET password = ?, email = ? WHERE id = ?";
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setString(1, user.getPassword());
        ps.setString(2, user.getEmail());
        ps.setInt(3, user.getId());
        ps.executeUpdate();
        ps.close();
    }

    @Override
    public void deleteUser(int userId) throws SQLException {
        String query = "DELETE FROM users WHERE id = ?";
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setInt(1, userId);
        ps.executeUpdate();
        ps.close();
    }

    @Override
    public User getUserById(int userId) throws SQLException {
        String query = "SELECT * FROM users WHERE id = ?";
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setInt(1, userId);
        ResultSet rs = ps.executeQuery();

        User user = null;
        if (rs.next()) {
            user = new User();
            user.setId(rs.getInt("id"));
            user.setUsername(rs.getString("username"));
            user.setPassword(rs.getString("password"));
            user.setEmail(rs.getString("email"));
        }

        rs.close();
        ps.close();

        return user;
    }

    @Override
    public List<User> getAllUsers() throws SQLException {
        String query = "SELECT * FROM users";
        PreparedStatement ps = connection.prepareStatement(query);
        ResultSet rs = ps.executeQuery();

        List<User> users = new ArrayList<>();
        while (rs.next()) {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setUsername(rs.getString("username"));
            user.setPassword(rs.getString("password"));
            user.setEmail(rs.getString("email"));
            users.add(user);
        }

        rs.close();
        ps.close();

        return users;
    }

}

Lớp này triển khai giao diện UserDao và thực hiện các phương thức để thêm, sửa, xoá và lấy thông tin người dùng từ cơ sở dữ liệu. Điều này cho phép ta tách biệt logic kết nối cơ sở dữ liệu và logic của ứng dụng.