开发者

SpringBoot集成JPA全指南

目录
  • 一、前言
  • 二、JPA 简介
  • 三、项目环境准备
    • 1. 新建 Spring Boot 项目
    • 2. Maven 依赖
    • 3. 配置数据库连接
  • 四、编写 JPA 样例
    • 1. 创建实体类
    • 2. 创建 Repository 接口
    • 3. 创建 Service 层
    • 4. 创建 Controller
  • 五、运行测试
    • 六、常见问题
      • 七、总结

        一、前言

        在 Java Web 开发中,数据库访问是绕不开的话题。

        传统方式使用 JDBC 编写 SQL,维护困难、可读性差。后来有了 MyBATis 这种半自动 ORM 框架,再到 JPA(Java Persistence API)这种全自动 ORM 规范,可以让我们用面向对象的方式操作数据库,而不必写大量 SQL。

        Spring Boot 对 JPA 提供了非常友好的自动化支持,几乎可以“零配置”就完成数据库操作。

        二、JPA 简介

        JPA(Java Persistence API)并不是一个具体实现,而是 Java 官方定义的 ORM 规范,它的常见实现有:

        • Hibernate(最常用,Spring Boot 默认 JPA 实现)
        • EclipseLink
        • OpenJPA

        核心思想

        实体类(Entity)映射数据库表,用 方法调用 代替手写 SQL。

        例如:

        // 查询所有用户
        List<User> users = userRepository.findAll();
        
        // 根据用户名查询
        User user = userRepository.findByUsername("Tom");
        

        三、项目环境准备

        1. 新建 Spring Boot 项目

        在 Spring Initializr 选择:

        Spring BesnTyoot 版本:3.x(或 2.7.x)

        依赖:

        • Spring Web
        • Spring Data JPA
        • mysql Driver

        生成后导入 IDE(IntelliJ IDEA / VSCode)。

        2. Maven 依赖

        如果是手动添加,pom.XML 配置如下:

        <dependencies>
            <!-- Spring 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>
        
            <!-- MySQL 驱动 -->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <scope>runtime</scope>
            </dependency>
        
            <!-- 测试依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        

        3. 配置数据库连接

        application.yml 中配置:

        spring:
          datasource:
            url: jdbc:mysql://localhost:3306/jpa_demo?usandroideSSL=false&serverTimezone=UTC
            username: root
            password: 123456
            driver-class-name: com.mysql.cj.jdbc.Driver
        
          jpa:
            hibernate:
              ddl-auto: update   # 自动建表(create、update、validate、none)
            show-sql: true       # 控制台打印 SQL
            properties:
              hibernate:
                format_sql: true # 格式化 SQL 输出
        

        ddl-auto 参数说明:

        • create:每次启动删除旧表,创建新表
        • update:如果表不存在则创建,如果有新字段则更新
        • validate:验证表结构和实体类是否匹配
        • none:不做任何处理

        四、编写 JPA 样例

        1. 创建实体类

        User.java

        package com.example.jpademo.entity;
        
        import jakarta.persistence.*;
        import lombok.Data;
        
        @Data
        @Entity
        @Table(name = "users") // 表名
        public class User {
        
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增主键
            private Long id;
        
            @Column(nullable = false, unique = true, length = 50)
            private String username;
        
            @Column(nullable = false)
            private String password;
        }
        php

        2. 创建 Repository 接口

        UserRepository.java

        package com.example.jpademo.repository;
        
        import com.example.jpademo.entity.User;
        import org.springframework.data.jpa.repository.JpaRepository;
        
        public interface UserRepository extends JpaRepository<User, Long> {
            // 按用户名查找
            User findByUsername(String username);
        }
        

        JpaRepository 已经内置了大量方法:save()findAll()findById()deleteById() 等。

        3. 创建 Service 层

        UserService.java

        package com.example.jpademo.service;
        
        import com.example.jwww.devze.compademo.entity.User;
        import com.example.jpademo.repository.UserRepository;
        import org.springframework.stereotype.Service;
        
        import java.util.List;
        
        @Service
        public class UserService {
        
            private final UserRepository userRepository;
            public UserService(UserRepository userRepository) {
                this.userRepository = userRepository;
            }
        
            public List<User> getAllUsers() {
                return userRepository.findAll();
            }
        
            public User createUser(User user) {
                return userRepository.save(user);
            }
        }
        

        4. 创建 Controller

        UserController.java

        package com.example.jpademo.controller;
        
        import com.example.jpademo.entity.User;
        import com.example.jpademo.service.UserService;
        import org.springframework.web.bind.annotation.*;
        
        import java.util.List;
        
        @RestController
        @RequestMapping("/users")
        public class UserController {
        www.devze.com
            private final UserService userService;
            public UserController(UserService userService) {
                this.userService = userService;
            }
        
            @GetMapping
            public List<User> list() {
                return userService.getAllUsers();
            }
        
            @PostMapping
            public User add(@RequestBody User user) {
                return userService.createUser(user);
            }
        }
        

        五、运行测试

        启动 Spring Boot 项目(IDEA Run

        使用 Postman 测试:

        新增用户

        POST http://localhost:8080/users
        Content-Type: application/json
        
        {
          "username": "Tom",
          "password": "123456"
        }
        

        查询所有用户

        GET http://localhost:8080/users
        

        控制台会输出类似:

        insert into users (password, username) values (?, ?)
        select u1_0.id, u1_0.password, u1_0.username from users u1_0
        

        六、常见问题

        为什么启动时会自动建表?

        因为 spring.jpa.hibernate.ddl-auto 设置了 update,Hibernate 会自动根据实体生成表结构。

        不想自动建表怎么办?

        ddl-auto 改成 nonevalidate,用手动 SQL 建表。

        怎么写复杂 SQL?

        • 方法名查询:findByUsernameAndPassword
        • JPQL 查询:@Query("select u from User u where u.username = ?1")
        • 原生 SQL:@Query(value = "select * from users where username = ?1", nativeQuery = true)

        七、总结

        Spring Boot 集成 JPA 最大的优点就是:

        • 几乎零配置即可运行
        • 面向对象操作数据库,减少 SQL 编写
        • 内置方法丰富,支持分页、排序、条件查询
        • 复杂 SQL 也可以灵活编写

        但要注意:

        • 适合中小型业务,超复杂 SQL 可能 MyBatis 更高效
        • ddl-auto 在生产环境建议设为 none,防止误删表
        • 尽量用事务(@Transactional)保证数据一致性

        以上就是SpringBoot集成JPA全指南的详细内容,更多关于SpringBoot集成JPA的资料请关注编程客栈(www.devze.com)其它相关文章!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜