Что такое DAO и как оно функционирует в блокчейне?
DAO (Data Access Object) - это шаблон проектирования, который используется для работы с базами данных. Концепция DAO состоит в том, чтобы отделить бизнес-логику приложения от самого процесса сохранения и извлечения данных. Это позволяет лучше организовать код приложения, упростить его тестирование и сделать более расширяемым.
Рассмотрим пример простой реализации DAO на Java для работы с таблицей "пользователи":
1. Создаем Java-класс "User", который будет представлять пользователя в приложении:
public class User {
private int id;
private String name;
// геттеры и сеттеры для id и name
}
2. Создаем интерфейс "UserDAO", в котором определим методы для работы с пользователями:
public interface UserDAO {
User getUserById(int id);
List
void saveUser(User user);
void updateUser(User user);
void deleteUser(User user);
}
3. Создаем реализацию интерфейса "UserDAO" для работы с базой данных. В данном примере мы будем использовать стандартный JDBC-драйвер для работы с СУБД MySQL:
public class JdbcUserDAOImpl implements UserDAO {
private Connection conn;
public JdbcUserDAOImpl(Connection conn) {
this.conn = conn;
}
public User getUserById(int id) {
User user = null;
// создаем SQL-запрос для получения пользователя по id
String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = conn.prepareStatement(sql);
stmt.setInt(1, id);
rs = stmt.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
}
} catch (SQLException e) {
// обработка исключений
} finally {
// закрываем все ресурсы
}
return user;
}
public List
List
// создаем SQL-запрос для получения всех пользователей
String sql = "SELECT * FROM users";
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
userList.add(user);
}
} catch (SQLException e) {
// обработка исключений
} finally {
// закрываем все ресурсы
}
return userList;
}
public void saveUser(User user) {
// создаем SQL-запрос для сохранения пользователя в базе данных
String sql = "INSERT INTO users (name) VALUES (?)";
PreparedStatement stmt = null;
try {
stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, user.getName());
stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
user.setId(rs.getInt(1));
}
} catch (SQLException e) {
// обработка исключений
} finally {
// закрываем все ресурсы
}
}
public void updateUser(User user) {
// создаем SQL-запрос для обновления пользователя в базе данных
String sql = "UPDATE users SET name = ? WHERE id = ?";
PreparedStatement stmt = null;
try {
stmt = conn.prepareStatement(sql);
stmt.setString(1, user.getName());
stmt.setInt(2, user.getId());
stmt.executeUpdate();
} catch (SQLException e) {
// обработка исключений
} finally {
// закрываем все ресурсы
}
}
public void deleteUser(User user) {
// создаем SQL-запрос для удаления пользователя из базы данных
String sql = "DELETE FROM users WHERE id = ?";
PreparedStatement stmt = null;
try {
stmt = conn.prepareStatement(sql);
stmt.setInt(1, user.getId());
stmt.executeUpdate();
} catch (SQLException e) {
// обработка исключений
} finally {
// закрываем все ресурсы
}
}
}
4. Используем созданный DAO в приложении:
public class MyApp {
public static void main(String[] args) {
// создаем объект Connection для работы с базой данных
Connection conn = getConnection();
// создаем объект DAO для работы с пользователями
UserDAO userDAO = new JdbcUserDAOImpl(conn);
// используем DAO для сохранения нового пользователя
User user = new User();
user.setName("John Smith");
userDAO.saveUser(user);
// используем DAO для получения всех пользователей
List
for (User u : userList) {
System.out.println(u.getId() + " - " + u.getName());
}
// используем DAO для обновления пользователя
user.setName("Peter Parker");
userDAO.updateUser(user);
// используем DAO для удаления пользователя
userDAO.deleteUser(user);
}
}
Это простой пример реализации DAO для работы с базой данных на Java. Однако, в реальном приложении DAO может содержать гораздо больше методов для работы с данными, а также использовать более мощные инструменты работы с базами данных, такие как ORM-фреймворки (например, Hibernate).