spring boot JPA完整全套代码

 

 

 

项目结构回顾
plaintext
 
 
src/main/java/com/demo
├─ DemoApplication.java                启动类
├─ entity
│   └─ User.java                       实体类
├─ repository
│   ├─ UserRepoByRepository.java
│   ├─ UserRepoByCrud.java
│   └─ UserRepository.java
└─ controller
    └─ UserController.java

src/main/resources
└─ application.yml

 

 
pom.xml 依赖也一并提供

1. pom.xml

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/>
    </parent>

    <groupId>com.demo</groupId>
    <artifactId>springdata-jpa-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springdata-jpa-demo</name>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Data JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- H2 内存数据库,无需安装数据库 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- lombok 简化实体类get/set -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

 

2. application.yml(resources 下)

yaml
 
 
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  h2:
    console:
      enabled: true   # 浏览器可以访问h2数据库控制台
  jpa:
    hibernate:
      ddl-auto: update # 自动创建/更新数据表
    show-sql: true     # 控制台打印执行的SQL
    properties:
      hibernate:
        format_sql: true # SQL格式化排版
 

 

3. 启动类 com.demo.DemoApplication.java

java
 
运行
 
 
package com.demo;

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

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

 

4. 实体类 com.demo.entity.User.java

java
 
运行
 
 
package com.demo.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "t_user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
}
 

 

5. Repository 三层接口

5.1 com.demo.repository.UserRepoByRepository.java

继承顶层标记接口 Repository,没有自带 CRUD 方法,全部方法自己定义
java
 
运行
 
 
package com.demo.repository;

import com.demo.entity.User;
import org.springframework.data.repository.Repository;
import java.util.Optional;

public interface UserRepoByRepository extends Repository<User, Long> {
    // 必须手动声明保存方法,没有自带save
    User save(User user);
    // 方法名查询
    Optional<User> findByName(String name);
}
 

 

5.2 com.demo.repository.UserRepoByCrud.java

继承 CrudRepository,自带基础增删改查
java
 
运行
 
 
package com.demo.repository;

import com.demo.entity.User;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;

public interface UserRepoByCrud extends CrudRepository<User, Long> {
    // 自带 save findById findAll delete
    Optional<User> findByName(String name);
}
 

 

5.3 com.demo.repository.UserRepository.java

继承 JpaRepository(企业最常用,CRUD + 分页排序)
java
 
运行
 
 
package com.demo.repository;

import com.demo.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByName(String name);
    // 条件分页
    Page<User> findByAgeGreaterThan(Integer age, Pageable pageable);
}

 

 

6. Controller com.demo.controller.UserController.java

java
 
运行
 
 
package com.demo.controller;

import com.demo.entity.User;
import com.demo.repository.UserRepoByCrud;
import com.demo.repository.UserRepoByRepository;
import com.demo.repository.UserRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserRepository userRepository;

    @Resource
    private UserRepoByCrud userRepoByCrud;

    @Resource
    private UserRepoByRepository userRepoByRepository;


    // ===================== 使用 JpaRepository =====================
    @GetMapping("/add")
    public User addUser() {
        User user = new User(null, "张三", 22);
        return userRepository.save(user);
    }

    @GetMapping("/list")
    public List<User> listAll() {
        return userRepository.findAll();
    }

    // 分页:第0页,每页5条
    @GetMapping("/page")
    public Page<User> pageUser() {
        PageRequest pageRequest = PageRequest.of(0, 5);
        return userRepository.findAll(pageRequest);
    }

    @GetMapping("/pageAge")
    public Page<User> pageByAge() {
        PageRequest pageRequest = PageRequest.of(0, 5);
        return userRepository.findByAgeGreaterThan(20, pageRequest);
    }

    // ===================== 使用 CrudRepository =====================
    @GetMapping("/crud/find")
    public Optional<User> crudFind() {
        return userRepoByCrud.findByName("张三");
    }

    // ===================== 使用 Repository(标记接口)=====================
    @GetMapping("/base/save")
    public User baseSave() {
        User user = new User(null, "李四", 25);
        return userRepoByRepository.save(user);
    }

    @GetMapping("/base/find")
    public Optional<User> baseFind() {
        return userRepoByRepository.findByName("李四");
    }
}

 

 

测试地址(启动项目后浏览器访问)

plaintext
 
 
# 添加张三
http://localhost:8080/user/add

# 查询全部
http://localhost:8080/user/list

# 分页
http://localhost:8080/user/page

# 使用基础Repository新增李四
http://localhost:8080/user/base/save

 

 

完整流程串起来(从头到尾)

  1. 启动类 @SpringBootApplication 启动项目
  2. Spring 扫描包,发现 User.java 带有 @Entity
  3. Hibernate 读取 User 实体所有注解(@Entity、@Id、字段)
  4. 根据 spring.jpa.hibernate.ddl-auto=update,自动执行建表 SQL,生成 t_user 数据表
  5. SpringData 扫描 repository 包下所有继承Repository系列接口
  6. 自动生成 UserRepository 接口的实现类,放入 Spring 容器
  7. Controller 使用 @Resource 注入 UserRepository,直接调用 save()findAll() 操作数据库

 

 

 

posted @ 2026-07-30 14:59  漫漫长路</>  阅读(5)  评论(0)    收藏  举报