数据源(DataSource)
数据源是数据库连接的来源,通过 DataSource 接口获取。
类型
- 通用型数据源(javax.sql.DataSource)
主要使用场景:通用型数据库,本地事务,一般通过Socket方式连接。 - 分布式数据源(javax.sql.XADataSource)
主要使用场景:通用型数据库,分布式事务,一般通过Socket方式连接。 - 嵌入式数据源(org.springframework.jdbc.datasource.embedded.EmbeddedDatabase)
主要使用场景:本地文件系统数据库,如:HSQL、H2、Derby等。
枚举:org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType
事务(Transaction)
事务用于提供数据完整性,并在并发访问下确保数据视图的一致性。
自动提交模式(Auto-commit mode)
默认情况下,当独立SQL语句执行后,当前事务将会自动提交。
事务隔离级别(Transaction isolation levels)
事务隔离级别决定事务中执行语句中的数据可见性。
事务并发可能的影响
- 脏读(dirty reads):A线程在读的时候,B线程在写,A线程在读的时候读到B线程修改后的数据(数据库同理)
- 不可重复读(nonrepeatable reads):A读去读某一行的时候,B去修改同一行,A再去读的时候就会不一样
- 幻读(phantom reads):
保护点(Savepoints):
保护点是在事务中创建,提供细粒度事务控制。
使用场景
- 部分事务回滚
- 选择性释放
触发时机
- DML 执行后(insert/update/delete)
- DDL 执行后(定义语句create table)
- SELECT 查询后结果集关闭后
- 存储过程执行后(如果执行返回结果集的话,待其关闭后)
JDBC 4.0(JSR-221)
核心接口
驱动接口:java.sql.Drvier
驱动管理:java.sql.DriverManager
数据源:javax.sql.DataSource
数据连接:java.sql.Connection
执行语句:java.sql.Statement
查询结果集:java.sql.ResultSet
元数据接口:java.sql.DatabaseMetaData、java.sql.ResultSetMetaData
Spring Boot 整合
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.segmentfault</groupId>
<artifactId>spring-boot-lesson-6</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-jdbc</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>commons-