目录
-
PostgreSQL 基础
-
安装与配置
-
数据库、表与数据类型
-
-
SQL 基础操作
-
CRUD(增删改查)
-
条件查询、排序、聚合
-
-
Java JDBC 实战
-
连接 PostgreSQL
-
PreparedStatement、防止 SQL 注入
-
事务与批量操作
-
-
Spring Boot 入门
-
项目初始化与依赖
-
数据源配置(PostgreSQL)
-
-
Spring Boot JPA/Hibernate 实战
-
实体类、Repository、Service
-
CRUD 操作
-
分页、排序、自定义查询
-
-
高级 PostgreSQL 特性
-
索引
-
事务
-
存储过程、触发器
-
-
Spring Boot 高级实践
-
@Transactional 事务管理
-
批量操作
-
连接池优化(HikariCP)
-
-
实战案例
-
简单博客系统
-
用户管理 + 文章管理
-
查询、分页、排序、事务
-
-
性能优化与实战技巧
-
查询优化(EXPLAIN ANALYZE)
-
索引策略
-
大数据量处理
-
多线程访问数据库
-
1️⃣ PostgreSQL 基础
-- 创建数据库
CREATE DATABASE demo_db;
-- 用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 文章表
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
user_id INT REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2️⃣ SQL 基础操作(示例)
-- 插入
INSERT INTO users(username, email) VALUES('Alice', 'alice@example.com');
-- 查询
SELECT * FROM users;
-- 更新
UPDATE users SET email='alice_new@example.com' WHERE id=1;
-- 删除
DELETE FROM users WHERE id=1;
3️⃣ Java JDBC 实战
import java.sql.*;
public class PostgresJDBCDemo {
public static void main(String[] args) throws SQLException {
String url = "jdbc:postgresql://localhost:5432/demo_db";
String user = "postgres";
String password = "yourpassword";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("Connected!");
// 插入
String insertSQL = "INSERT INTO users(username, email) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
pstmt.setString(1, "Bob");
pstmt.setString(2, "bob@example.com");
pstmt.executeUpdate();
}
// 查询
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
while (rs.next()) {
System.out.println(rs.getInt("id") + ": " + rs.getString("username"));
}
}
}
}
}
4️⃣ Spring Boot 入门 + 数据源配置
pom.xml 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/demo_db
spring.datasource.username=postgres
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
5️⃣ Spring Boot JPA 实战
User 实体类:
import jakarta.persistence.*;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(nullable=false, unique=true)
private String username;
private String email;
private LocalDateTime createdAt = LocalDateTime.now();
}
Repository 接口:
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
Service & Controller:
@Service
public class UserService {
private final UserRepository repo;
public UserService(UserRepository repo) { this.repo = repo; }
public User createUser(String username, String email) {
User u = new User();
u.setUsername(username);
u.setEmail(email);
return repo.save(u);
}
public List<User> listUsers() { return repo.findAll(); }
@Transactional
public void updateEmail(Long id, String newEmail) {
User u = repo.findById(id).orElseThrow();
u.setEmail(newEmail);
}
}
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService service;
public UserController(UserService service) { this.service = service; }
@PostMapping
public User create(@RequestParam String username, @RequestParam String email) {
return service.createUser(username, email);
}
@GetMapping
public List<User> list() { return service.listUsers(); }
@PutMapping("/{id}/email")
public void updateEmail(@PathVariable Long id, @RequestParam String email) {
service.updateEmail(id, email);
}
}
6️⃣ 高级 PostgreSQL 特性 + Spring Boot 实战
-
事务 @Transactional
-
批量插入 saveAll()
-
分页 & 排序
Page<User> page = userRepository.findAll(PageRequest.of(0, 10, Sort.by("createdAt").descending()));自定义查询
@Query("SELECT u FROM User u WHERE u.username LIKE %:name%") List<User> searchByName(@Param("name") String name);触发器/函数
CREATE OR REPLACE FUNCTION update_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.created_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER update_users_time BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_timestamp();PostgreSQL + Java / Spring Boot 学习总结
-
PostgreSQL 基础
-
PostgreSQL 是一个功能强大的关系型数据库,支持 SQL 标准和丰富的数据类型。
-
核心概念包括数据库、表、列、行、主键、外键、索引、约束等。
-
学会基础 SQL 操作:增、删、改、查(CRUD),条件查询、排序、聚合函数等。
-
-
Java JDBC 实战
-
使用 JDBC 可以直接连接 PostgreSQL,执行 SQL 语句。
-
熟练掌握 PreparedStatement 可以防止 SQL 注入。
-
理解事务、批量操作和结果集处理是数据库开发的基础。
-
-
Spring Boot 整合 PostgreSQL
-
Spring Boot 提供了简化的数据访问方式,结合 JPA/Hibernate 可以用对象操作数据库。
-
核心能力包括实体类映射、Repository 接口、Service 层封装业务逻辑。
-
事务管理、批量操作、分页和排序都可以通过注解和接口轻松实现。
-
-
高级 PostgreSQL 特性
-
索引可以优化查询性能,包括 B-Tree、GIN 等类型。
-
触发器、函数和存储过程可以在数据库端实现自动化逻辑。
-
使用事务保证数据一致性,结合 Spring Boot 的 @Transactional 可以简化管理。
-
-
学习路线与实践策略
-
阶段一:从 SQL 基础和 PostgreSQL 安装开始,理解数据库结构和操作。
-
阶段二:用 Java JDBC 直接操作数据库,掌握基础编程技巧和事务处理。
-
阶段三:结合 Spring Boot 和 JPA,实现快速开发、事务管理和高级查询。
-
阶段四:学习性能优化、索引策略、批量处理和大数据量操作。
-
-
核心收获
-
理解数据库原理和 SQL 操作是基础。
-
JDBC 提供了与数据库交互的底层能力,是深入理解 ORM 的前提。
-
Spring Boot + JPA 极大提高开发效率,同时保留灵活性和性能优化能力。
-
综合掌握后,可以从小型应用到复杂业务系统都能高效使用 PostgreSQL。
-