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
}

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

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

相关推荐
止语Lab9 小时前
Go并发编程实战:Channel 还是 Mutex?一个场景驱动的选择框架
开发语言·后端·golang
小码哥_常10 小时前
Spring Boot一键限速:守护你的接口“高速路”
后端
阿丰资源10 小时前
基于SpringBoot的物流信息管理系统设计与实现(附资料)
java·spring boot·后端
王码码203511 小时前
Go语言的包管理:从GOPATH到Go Modules
后端·golang·go·接口
IT_陈寒13 小时前
Redis的内存溢出坑把我整懵了,分享这个血泪教训
前端·人工智能·后端
Jasper_o15 小时前
MassTransit OutBox 不发送消息问题
后端·.net
掘金码甲哥15 小时前
glm模型这么火,咱们用vllm也咧一个呗
后端
邦爷的AI架构笔记15 小时前
踩坑3天后,我把公司的AI接口全换成了多模型路由——GPT-6和Claude Opus 4.7同时上线的这周
人工智能·后端
DashVector16 小时前
AI Agent 接入 Zvec (一):MCP 篇
数据库·人工智能·后端
程序员老邢16 小时前
【技术底稿 15】SpringBoot 异步文件上传实战:多线程池隔离 + 失败重试 + 实时状态推送
java·经验分享·spring boot·后端·程序人生·spring