From f7aa38b65a55ed0a2ced570ba9470cbc0561ff7f Mon Sep 17 00:00:00 2001 From: wangzipai <38389763+wangzipai@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:58:16 +0800 Subject: [PATCH] [PUBLISHER] Merge #16 * PUSH NOTE : DAO.md * PUSH NOTE : JDBC.md --- content/Obsidian/编程模型及方法/DAO.md | 94 ++++++++++++++++++++++++++ content/Obsidian/编程语言/Java/JDBC.md | 90 ++++++++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 content/Obsidian/编程模型及方法/DAO.md create mode 100644 content/Obsidian/编程语言/Java/JDBC.md diff --git a/content/Obsidian/编程模型及方法/DAO.md b/content/Obsidian/编程模型及方法/DAO.md new file mode 100644 index 000000000..2a7e82bfe --- /dev/null +++ b/content/Obsidian/编程模型及方法/DAO.md @@ -0,0 +1,94 @@ +--- +date created: 2024-10-31 16:48 +date updated: 2024-10-31 16:58 +tags: + - 设计模式 +share: "true" +link: "false" +--- + +# 什么是DAO? + +**DAO** (Data Access Object数据访问对象)是一个设计模式,用于==处理程序与数据源之间的交互==。数据源可以是数据库、文件系统或其他存储系统。DAO的主要作用是将业务逻辑(你的应用程序的主要功能)与数据访问逻辑(如何存取数据)分开。 + +# 为什么要使用DAO? + +## 分离关注点 + +将业务逻辑与数据访问逻辑分开,使代码更加清晰和易于维护。你可以专注于实现业务功能,而不必关心如何存取数据。 + +## 方便更改 + +如果需要更换数据源(例如,从MySQL换成PostgreSQL),只需修改DAO的实现,不用更改业务逻辑。 + +## 提高可测试性 + +使用DAO模式,你可以创建模拟对象来测试业务逻辑,而无需连接真实的数据库。这**使得单元测试更加简单和高效**。 + +# DAO的组成部分 + +一个典型的DAO结构通常包括以下几个部分: + +## DAO接口 + +定义数据访问的方法,例如: + +```java +public interface UserDAO { + void create(User user); + User read(int id); + void update(User user); + void delete(int id); +} +``` + +## DAO实现类 + +实现上述接口,并包含具体的数据访问逻辑。例如,使用[[../编程语言/Java/JDBC|JDBC]]来连接数据库: + +```java +public class UserDAOImpl implements UserDAO { + @Override + public void create(User user) { + // 代码来插入用户到数据库 + } + + @Override + public User read(int id) { + // 代码来从数据库读取用户 + return user; + } + + @Override + public void update(User user) { + // 代码来更新用户信息 + } + + @Override + public void delete(int id) { + // 代码来删除用户 + } +} +``` + +## 业务逻辑层 + +调用DAO接口来执行操作。它不需要知道具体的实现细节: + +```java +public class UserService { + private UserDAO userDAO; + + public UserService(UserDAO userDAO) { + this.userDAO = userDAO; + } + + public void registerUser(User user) { + userDAO.create(user); + } +} +``` + +# 总结 + +DAO模式的核心思想是通过一个抽象层(DAO接口)与具体实现(DAO实现类)分离数据访问逻辑,使得代码更加模块化和可维护。理解这一模式能更好地构建应用程序,并能在以后的项目中更灵活地处理数据。 diff --git a/content/Obsidian/编程语言/Java/JDBC.md b/content/Obsidian/编程语言/Java/JDBC.md new file mode 100644 index 000000000..e17c9fb85 --- /dev/null +++ b/content/Obsidian/编程语言/Java/JDBC.md @@ -0,0 +1,90 @@ +--- +date created: 2024-10-31 16:55 +date updated: 2024-10-31 16:57 +tags: + - java + - 数据库 +share: "true" +link: "false" +--- + +**JDBC**(Java Database Connectivity)是Java语言中的一套API,用于与各种数据库进行交互。它提供了一种标准的方法来连接、查询、更新和管理数据库中的数据。以下是一些关于JDBC的基本概念和功能: + +### 主要功能 + +1. **连接数据库**:JDBC允许Java应用程序与数据库建立连接。通过提供数据库的URL、用户名和密码,可以连接到特定的数据库实例。 + +2. **执行SQL语句**:一旦建立连接,JDBC可以执行SQL查询(例如`SELECT`)、插入(`INSERT`)、更新(`UPDATE`)和删除(`DELETE`)等操作。 + +3. **处理结果**:执行SQL语句后,JDBC会返回结果集(ResultSet),你可以通过它读取查询结果。 + +4. **事务管理**:JDBC支持事务操作,可以通过commit和rollback来管理数据库的状态。 + +### JDBC的组成部分 + +1. **JDBC驱动**:驱动是连接特定数据库的实现,负责处理与数据库的实际交互。根据不同的数据库类型,有不同的JDBC驱动(例如,MySQL、PostgreSQL、Oracle等)。驱动通常有四种类型: + - **类型 1**:JDBC-ODBC桥接驱动(不推荐使用) + - **类型 2**:本地API驱动 + - **类型 3**:网络协议驱动 + - **类型 4**:纯Java驱动(推荐使用,通常是最常用的) + +2. **Connection**:表示与数据库的连接,可以用来创建Statement对象。 + +3. **Statement**:用于执行SQL语句的对象,有几种不同的类型: + - `Statement`:用于执行简单的SQL语句。 + - `PreparedStatement`:用于执行预编译的SQL语句,更高效且可防止SQL注入。 + - `CallableStatement`:用于执行存储过程。 + +4. **ResultSet**:表示查询结果的数据集,允许遍历结果集中的记录。 + +### 基本使用示例 + +下面是一个简单的JDBC示例,展示如何连接到数据库并执行查询: + +```java +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +public class JdbcExample { + public static void main(String[] args) { + String url = "jdbc:mysql://localhost:3306/your_database"; + String user = "your_username"; + String password = "your_password"; + + try { + // 1. 加载驱动 + Class.forName("com.mysql.cj.jdbc.Driver"); + + // 2. 建立连接 + Connection connection = DriverManager.getConnection(url, user, password); + + // 3. 创建Statement + Statement statement = connection.createStatement(); + + // 4. 执行查询 + String sql = "SELECT * FROM users"; + ResultSet resultSet = statement.executeQuery(sql); + + // 5. 处理结果 + while (resultSet.next()) { + System.out.println("User ID: " + resultSet.getInt("id")); + System.out.println("Username: " + resultSet.getString("username")); + } + + // 6. 关闭连接 + resultSet.close(); + statement.close(); + connection.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} +``` + +### 总结 + +JDBC是Java程序与数据库交互的重要工具,它提供了统一的接口来处理不同数据库的操作,使得Java开发者能够轻松地执行数据库相关的任务。