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
}

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

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

相关推荐
小码哥_常18 分钟前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设3 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
努力的小雨5 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
excel7 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记7 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序7 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
属于自己的天空7 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端
Tokenfree8 小时前
给大模型调用加一个熔断器:60 行代码,三个阈值
后端
Jason_chen8 小时前
Linux 进程调度器深入解析与实时性优化指南(基于 Linux 5.10+)
后端
136096757238 小时前
三个 Agent 干同一个活,职责边界到底该怎么划
后端