[PUBLISHER] Merge #16

* PUSH NOTE : DAO.md

* PUSH NOTE : JDBC.md
This commit is contained in:
wangzipai 2024-10-31 16:58:16 +08:00 committed by GitHub
parent 8c1094ec43
commit f7aa38b65a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 184 additions and 0 deletions

View File

@ -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实现类分离数据访问逻辑使得代码更加模块化和可维护。理解这一模式能更好地构建应用程序并能在以后的项目中更灵活地处理数据。

View File

@ -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开发者能够轻松地执行数据库相关的任务。