首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL 入门到精通 + Java & Spring Boot 实战教程

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

作者头像
伯灵
发布2026-01-21 09:55:54
发布2026-01-21 09:55:54
1360
举报

1️⃣ PostgreSQL 基础

代码语言:javascript
复制
-- 创建数据库
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 基础操作(示例)

代码语言:javascript
复制
-- 插入
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 实战

代码语言:javascript
复制
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 依赖

代码语言:javascript
复制
<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

代码语言:javascript
复制
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 实体类

代码语言:javascript
复制
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 接口

代码语言:javascript
复制
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

Service & Controller

代码语言:javascript
复制
@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()

分页 & 排序

代码语言:javascript
复制
Page<User> page = userRepository.findAll(PageRequest.of(0, 10, Sort.by("createdAt").descending()));

自定义查询

代码语言:javascript
复制
@Query("SELECT u FROM User u WHERE u.username LIKE %:name%")
List<User> searchByName(@Param("name") String name);

触发器/函数

代码语言:javascript
复制
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。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1️⃣ PostgreSQL 基础
  • 2️⃣ SQL 基础操作(示例)
  • 3️⃣ Java JDBC 实战
  • 4️⃣ Spring Boot 入门 + 数据源配置
  • 5️⃣ Spring Boot JPA 实战
  • 6️⃣ 高级 PostgreSQL 特性 + Spring Boot 实战
  • PostgreSQL + Java / Spring Boot 学习总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档