PostgreSQL 入门到精通 + Java & Spring Boot 实战教程

目录

  1. PostgreSQL 基础

    • 安装与配置

    • 数据库、表与数据类型

  2. SQL 基础操作

    • CRUD(增删改查)

    • 条件查询、排序、聚合

  3. Java JDBC 实战

    • 连接 PostgreSQL

    • PreparedStatement、防止 SQL 注入

    • 事务与批量操作

  4. Spring Boot 入门

    • 项目初始化与依赖

    • 数据源配置(PostgreSQL)

  5. Spring Boot JPA/Hibernate 实战

    • 实体类、Repository、Service

    • CRUD 操作

    • 分页、排序、自定义查询

  6. 高级 PostgreSQL 特性

    • 索引

    • 事务

    • 存储过程、触发器

  7. Spring Boot 高级实践

    • @Transactional 事务管理

    • 批量操作

    • 连接池优化(HikariCP)

  8. 实战案例

    • 简单博客系统

    • 用户管理 + 文章管理

    • 查询、分页、排序、事务

  9. 性能优化与实战技巧

    • 查询优化(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。

相关推荐
海奥华21 小时前
分库分表技术详解:从入门到实践
数据库·后端·mysql·golang
i***39582 小时前
Springboot中SLF4J详解
java·spring boot·后端
z***94842 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
p***95002 小时前
spring Profile
java·数据库·spring
艺杯羹2 小时前
从Spring到SpringBoot3的演进:缺陷、优化与最新实践要求
java·spring boot·spring
一 乐2 小时前
宠物管理宠物医院管理|基于Java+vue的宠物医院管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·宠物
一 乐2 小时前
学习辅导系统|数学辅导小程序|基于java+小程序的数学辅导小程序设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习·小程序
励志成为糕手2 小时前
基于SpringBoot的企业考勤管理系统设计与实现
java·spring boot·后端·web·企业应用
w***4242 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins