1. JDBC(Java Database Connectivity)
JDBC是Java提供的一種數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn),它允許Java程序連接到任何類(lèi)型的數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句,并處理結(jié)果。
1.1 JDBC連接步驟
- 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) :使用
Class.forName()
方法加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)。 - 建立連接 :使用
DriverManager.getConnection()
方法建立與數(shù)據(jù)庫(kù)的連接。 - 創(chuàng)建Statement :通過(guò)連接對(duì)象創(chuàng)建
Statement
對(duì)象,用于執(zhí)行SQL語(yǔ)句。 - 執(zhí)行SQL語(yǔ)句 :使用
Statement
對(duì)象的executeQuery()
或executeUpdate()
方法執(zhí)行SQL語(yǔ)句。 - 處理結(jié)果 :對(duì)于查詢(xún)操作,使用
ResultSet
對(duì)象處理返回的結(jié)果集。 - 關(guān)閉資源 :最后,關(guān)閉
ResultSet
、Statement
和數(shù)據(jù)庫(kù)連接。
1.2 示例代碼
import java.sql.*;
public class JdbcDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "password";
try {
// 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立連接
Connection conn = DriverManager.getConnection(url, user, password);
// 創(chuàng)建Statement
Statement stmt = conn.createStatement();
// 執(zhí)行查詢(xún)
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 處理結(jié)果
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(name + ", " + age);
}
// 關(guān)閉資源
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
2. 使用連接池
在Web應(yīng)用程序中,頻繁地打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接是非常消耗資源的。因此,使用連接池是一個(gè)更好的選擇。
2.1 常見(jiàn)的連接池
- HikariCP :性能最好的連接池之一,也是Spring Boot的默認(rèn)連接池。
- Apache DBCP :Apache Commons提供的數(shù)據(jù)庫(kù)連接池。
- C3P0 :一個(gè)成熟的連接池實(shí)現(xiàn)。
2.2 配置HikariCP
在Spring Boot項(xiàng)目中,你可以通過(guò)application.properties
或application.yml
文件配置HikariCP。
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=MyHikariCP
spring.datasource.hikari.max-lifetime=2000000
spring.datasource.hikari.connection-timeout=30000
3. 使用ORM框架
ORM(Object-Relational Mapping)框架可以簡(jiǎn)化數(shù)據(jù)庫(kù)操作,將數(shù)據(jù)庫(kù)表映射為Java對(duì)象。
3.1 常見(jiàn)的ORM框架
- Hibernate :一個(gè)功能強(qiáng)大的ORM框架,支持多種數(shù)據(jù)庫(kù)。
- MyBatis :一個(gè)靈活的SQL映射框架,允許開(kāi)發(fā)者編寫(xiě)自定義的SQL語(yǔ)句。
- Spring Data JPA :基于Hibernate的JPA實(shí)現(xiàn),簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層的開(kāi)發(fā)。
3.2 示例:使用Spring Data JPA
- 添加依賴(lài) :在
pom.xml
中添加Spring Data JPA和數(shù)據(jù)庫(kù)驅(qū)動(dòng)的依賴(lài)。 - 配置數(shù)據(jù)源 :在
application.properties
中配置數(shù)據(jù)源。 - 創(chuàng)建實(shí)體類(lèi) :定義與數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類(lèi)。
- 創(chuàng)建Repository接口 :繼承
JpaRepository
接口,Spring Data JPA會(huì)自動(dòng)實(shí)現(xiàn)接口中的方法。 - 使用Repository :在服務(wù)層注入Repository,使用其提供的方法操作數(shù)據(jù)庫(kù)。
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository {
}
4. 最佳實(shí)踐
- 使用連接池 :避免每次請(qǐng)求都創(chuàng)建新的數(shù)據(jù)庫(kù)連接。
- 使用ORM框架 :減少SQL硬編碼,提高代碼的可維護(hù)性。
- 事務(wù)管理 :確保數(shù)據(jù)庫(kù)操作的原子性、一致性、隔離性和持久性。
-
SQL
+關(guān)注
關(guān)注
1文章
775瀏覽量
44254 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3848瀏覽量
64688 -
代碼
+關(guān)注
關(guān)注
30文章
4828瀏覽量
69058 -
JavaWeb
+關(guān)注
關(guān)注
0文章
16瀏覽量
6377
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
從Delphi、C++ Builder和Lazarus連接到MySQL數(shù)據(jù)庫(kù)
![從Delphi、C++ Builder和Lazarus<b class='flag-5'>連接</b>到MySQL<b class='flag-5'>數(shù)據(jù)庫(kù)</b>](https://file1.elecfans.com/web3/M00/06/A5/wKgZO2eN5IqANOPPAAAbvvhWjM0611.png)
適用于MySQL和MariaDB的Python連接器:可靠的MySQL數(shù)據(jù)連接器和數(shù)據(jù)庫(kù)
![適用于MySQL和MariaDB的Python<b class='flag-5'>連接</b>器:可靠的MySQL<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>連接</b>器和<b class='flag-5'>數(shù)據(jù)庫(kù)</b>](https://file1.elecfans.com/web3/M00/06/57/wKgZPGeJ2kmAcWpWAAAh1ecL_LM122.png)
避坑指南:云服務(wù)器數(shù)據(jù)庫(kù)購(gòu)買(mǎi)方法全攻略
從Delphi、C++ Builder和Lazarus連接到Oracle數(shù)據(jù)庫(kù)
MySQL數(shù)據(jù)庫(kù)的安裝
![MySQL<b class='flag-5'>數(shù)據(jù)庫(kù)</b>的安裝](https://file1.elecfans.com/web3/M00/05/E2/wKgZPGeF2XWAe83fAAAW9lhgvGk652.jpg)
云數(shù)據(jù)庫(kù)是哪種數(shù)據(jù)庫(kù)類(lèi)型?
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—Mysql數(shù)據(jù)庫(kù)表記錄丟失的數(shù)據(jù)恢復(fù)流程
![<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—Mysql<b class='flag-5'>數(shù)據(jù)庫(kù)</b>表記錄丟失的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)流程](https://file.elecfans.com/web2/M00/7B/26/pYYBAGNzCiiANj77AAH4iOB3xKM259.png)
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—MYSQL數(shù)據(jù)庫(kù)ibdata1文件損壞的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—通過(guò)拼接數(shù)據(jù)庫(kù)碎片恢復(fù)SQLserver數(shù)據(jù)庫(kù)
![<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—通過(guò)拼接<b class='flag-5'>數(shù)據(jù)庫(kù)</b>碎片恢復(fù)SQLserver<b class='flag-5'>數(shù)據(jù)庫(kù)</b>](https://file1.elecfans.com/web1/M00/F4/07/wKgaoWcjE32AbQdWAAJD_hojvJc119.png)
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b>出現(xiàn)823錯(cuò)誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例](https://file1.elecfans.com/web2/M00/07/F4/wKgaombs78mANJ1GAAPeSoXHVPE244.png)
Oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫(kù)delete刪除的數(shù)據(jù)恢復(fù)方法
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)所在分區(qū)空間不足報(bào)錯(cuò)的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—raid5陣列上層Sql Server數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—raid5陣列上層Sql Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例](https://file.elecfans.com/web2/M00/A2/AD/pYYBAGRLbSSAHhFWAAI9vWNRQec919.png)
PostgreSQL數(shù)據(jù)庫(kù)連接報(bào)錯(cuò)故障分析
![PostgreSQL<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>連接</b>報(bào)錯(cuò)故障分析](https://file1.elecfans.com/web2/M00/C5/5D/wKgaomXzrGaAKIeCAAAGq0HldSE325.png)
傳感器之外—兩個(gè)數(shù)據(jù)庫(kù)之間的“連接”查詢(xún)
![傳感器之外—兩個(gè)<b class='flag-5'>數(shù)據(jù)庫(kù)</b>之間的“<b class='flag-5'>連接</b>”查詢(xún)](https://file1.elecfans.com/web2/M00/C3/FB/wKgZomXv_IKABoIdAAAVnaXYiJs420.png)
評(píng)論