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
}

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

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

相关推荐
开心就好202519 分钟前
不同阶段的 iOS 应用混淆工具怎么组合使用,源码混淆、IPA混淆
后端·ios
架构师沉默26 分钟前
程序员如何避免猝死?
java·后端·架构
椰奶燕麦44 分钟前
Windows PackageManager (winget) 核心故障排错与通用修复指南
后端
zjjsctcdl1 小时前
springBoot发布https服务及调用
spring boot·后端·https
zdl6862 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情2 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player2 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明2 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
武超杰3 小时前
Spring Boot入门教程
java·spring boot·后端
IT 行者3 小时前
Spring Boot 集成 JavaMail 163邮箱配置详解
java·spring boot·后端