SpringBoot集成JPA(SpringBoot3.0、JDK17)

前言

首先在这里说下,文章只是我的平时工作时的有感而发,不去讨论 jpa 与 mybatis 的孰好孰坏,mybatis 虽然书写起来麻烦了点,但是优点在于节点可控(这个很重要),jpa 的优点在于语义化的,书写简洁,工作量少(用起来很爽)。

1.依赖

pom 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

这里如果是新建项目来测试,记得加上数据库连接的依赖:

pom 复制代码
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>

2.配置文件

yml 复制代码
spring:
  jpa:
    #方言
    database-platform: ${DB_PLATFORM:org.hibernate.dialect.MySQLDialect}
    #是否打印sql语句
    show-sql: true
    properties:
      hibernate.format_sql: true
    #启动时根据实体自动更新数据库表
    hibernate:
      ddl-auto: update

在这里说下ddl-auto这个配置,怕有些读者不理解,这个配置有五种选择:

含义大家可以参考文章:blog.csdn.net/qq_39500197...

3.实体类

java 复制代码
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "user")
@ToString(callSuper = true)
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.UUID)
  @Column(columnDefinition = "varchar(32) comment '主键编码'")
  private String id;

  @Column(columnDefinition = "varchar(64) comment '名称'")
  private String name;

  @Column(columnDefinition = "int comment '性别'")
  private Integer gender;
  
}

4.持久层

java 复制代码
@Repository
public interface UserRepository extends JpaRepository<User, String> {

  /**
   * 根据名称查询 user
   *
   * @param name
   * @return
   */
  User findByName(String name);

  /**
   * 根据性别删除 user
   *
   * @param integer
   */
  void deleteAllByGender(Integer integer);

  /**
   * 更新 user
   *
   * @param name
   * @param id
   */
  @Modifying
  @Query(value = "update user u set u.name = :name where u.id = :id",nativeQuery = true)
  void updateByName(@Param("name") String name,@Param("id") String id);

}

这我列举了几种形式,对于查询和删除是支持语义化的,不用写sql,但是更新时需要手写sql的

5.控制层

java 复制代码
@RestController
@RequestMapping("/api/user")
public class UserController {
  @Resource
  private UserRepository userRepository;

  @GetMapping
  public User findUser(){
    return userRepository.findByName("zhangsan");
  }
}

测试接口:GET http://localhost:8080/api/user

可以得到返回体:

json 复制代码
{
  "id": "1",
  "name": "zhangsan",
  "gender": 1
}

这个得提前在数据库插入一条哈。

能正常得到返回体,就说明成功了!

相关推荐
码蜂窝编程官方13 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm31 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊41 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
AuroraI'ncoding1 小时前
时间请求参数、响应
java·后端·spring
好奇的菜鸟1 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.01 小时前
Go语言进阶&依赖管理
开发语言·后端·golang
许苑向上1 小时前
Dubbo集成SpringBoot实现远程服务调用
spring boot·后端·dubbo
郑祎亦2 小时前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
本当迷ya2 小时前
💖2025年不会Stream流被同事排挤了┭┮﹏┭┮(强烈建议实操)
后端·程序员
计算机毕设指导63 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea