Spring Data JDBC | AI生成和翻译

Home 2025.02

Spring Data JDBC 是一个强大的库,它通过提供轻量级、基于注解的方式来操作关系型数据库,从而简化 Spring 应用程序中的数据库交互。与 Spring Data JPA 相比,它的约束更少,专注于更简单、更明确的对象到数据库表的映射方式。下面我将逐步介绍它的基本使用方法。

1. 项目设置

首先,你需要在项目中引入 Spring Data JDBC。如果使用 Maven,请在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

同时需要添加对应数据库的 JDBC 驱动(例如 H2、MySQL、PostgreSQL)。以 H2 为例:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

如果使用 Gradle,对应配置为:

implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
runtimeOnly 'com.h2database:h2'

2. 数据库配置

application.propertiesapplication.yml 中配置数据库连接。对于 H2 内存数据库,配置示例如下:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true

如果是 PostgreSQL 等实际数据库,需相应调整 URL、用户名和密码。

3. 定义领域模型

创建实体类来映射数据库表。Spring Data JDBC 默认遵循类名映射表名(转为小写),字段映射列名的约定。

import org.springframework.data.annotation.Id;

public class Person {
    @Id
    private Long id;
    private String firstName;
    private String lastName;

    // 默认构造函数(Spring Data JDBC 要求)
    public Person() {}

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getter 和 Setter 方法
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getFirstName() { return firstName; }
    public void setFirstName(String firstName) { this.firstName = firstName; }
    public String getLastName() { return lastName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
}

4. 创建仓储接口

定义继承 CrudRepository 的接口来处理基础 CRUD 操作:

import org.springframework.data.repository.CrudRepository;

public interface PersonRepository extends CrudRepository<Person, Long> {
}

无需实现该接口——Spring Data JDBC 会在运行时自动生成实现。

5. 使用仓储

将仓储注入服务层或控制器层即可使用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PersonService {
    private final PersonRepository repository;

    @Autowired
    public PersonService(PersonRepository repository) {
        this.repository = repository;
    }

    public void savePerson() {
        Person person = new Person("John", "Doe");
        repository.save(person);
        System.out.println("已保存人员,ID:" + person.getId());
    }

    public void listPeople() {
        Iterable<Person> people = repository.findAll();
        people.forEach(p -> System.out.println(p.getFirstName() + " " + p.getLastName()));
    }
}

6. 运行应用程序

如果使用 Spring Boot,创建包含 @SpringBootApplication 的主类并运行:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Spring Boot 将自动配置数据源和 Spring Data JDBC。

7. 可选:自定义查询

如需自定义查询,可在仓储接口中添加带 @Query 注解的方法:

import org.springframework.data.jdbc.repository.query.Query;
import org.springframework.data.repository.CrudRepository;

public interface PersonRepository extends CrudRepository<Person, Long> {
    @Query("SELECT * FROM person WHERE first_name = :name")
    List<Person> findByFirstName(String name);
}

关键要点说明

CREATE TABLE person (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    first_name VARCHAR(255),
    last_name VARCHAR(255)
);

典型工作流程

  1. 启动应用程序
  2. 使用 repository.save() 保存 Person 对象
  3. 通过 repository.findById()findAll() 进行检索

以上是基础使用指南。如果您想深入了解关联关系、自定义映射等特定内容,请告知具体需求,我将为您提供针对性解答。目前进展如何?


Back Donate