服務端開發--Spring MVC框架
Spring Data JDBC、JPA
解決数據庫訪問的問題,把數據持久化存儲。
JDBC
MySql,Oracle,H2…關係型數據庫如此多,寫代碼時不可能針对每一種數據庫都去想如何处理和存儲。
于是要求每個數據庫提供一個驅動程序,寫代碼時只跟驅動程序打交道,而不跟具體的數據庫做交互。
JDBC就是这樣一種媒介,屏蔽了各種數據庫的差異性。
DataSource
JDBC DataSource 是一个数据库连接池,可以管理一组预先打开的数据库连接,并通过 DataSource 对象将它们提供给应用程序。由于在应用程序中创建和关闭数据库连接可能会导致性能问题,因此使用 DataSource 可以有效地避免这些问题。
- 可以配置 DataSource 对象以自动检测和清除空闲或过期的数据库连接。
- 可以配置 DataSource 对象以在连接不可用时重试连接。
- 可以使用不同的 DataSource 实现来支持分布式事务和集群应用程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33public class JdbcDataSourceExample {
public static void main(String[] args) {
try {
// 创建 DataSource 对象
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost/test");
dataSource.setUsername("root");
dataSource.setPassword("password");
// 获取数据库连接
Connection conn = dataSource.getConnection();
// 创建 Statement 对象
Statement stmt = conn.createStatement();
// 执行 SQL 查询
ResultSet rs = stmt.executeQuery("SELECT * FROM customers");
// 处理结果集
while(rs.next()) {
System.out.println(rs.getString("name") + " " + rs.getString("email"));
}
// 关闭结果集、Statement 对象和数据库连接
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}每次都要建立連接,釋放連接,麻烦又重复,如何簡化呢?
SpringBoot Starter JDBC
Spring已經把这些抽取出來了,提取成了模板,只要提供可变的部分即可。
添加依赖:1
2
3
4<dependency>
<groupId>org.sptingframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
H2數據庫依赖包
H2数据库是一款基于Java编写的嵌入式关系型数据库管理系统(RDBMS),它支持SQL和JDBC API。它被设计成一个轻量级的数据库,可嵌入到Java应用程序中,并且非常容易使用和部署。具有高性能、小型化、可嵌入性、易用性和免费开源等优点1
2
3
4
5<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
H2訪問:
- http://localhost:8080/h2-console
- 驅動:org.h2.Driver
- JDBC URL: jdbc:h2:mem:[名字]
- 用戶名: sa
表结構的構造:
17行表示Taco是哪個order的,18行表示Taco在这個order里的先后順序:
我們不會直接操作对象,所以需要建立接口:
操作配料表的接口:
应用層代碼只看到接口,DAO層實現
- 只要接口沒改变,實現怎么改都能用
- 只關心使用不關心怎么實現
JdbcTemplate模版
spring提拱的模版,需要用時把它注入進來
只需要提供變化的部分就能用,比如查詢,只要提供查詢語句和把查到的結果轉成Java对象的實現就可以了
轉換对象:
插入:
JPA
JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
定義接口繼承CurdRepository就好了,方法都集成了:
对表數據定制化操作
@Table
可以針对領域对象,指定將对象对应到哪張表,名字一樣可不加1
@Table("doll")
@Column
指定列名@OneToMany