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
}

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

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

相关推荐
wn53136 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
希冀1231 小时前
【操作系统】1.2操作系统的发展与分类
后端
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people3 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
罗政8 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
拾光师9 小时前
spring获取当前request
java·后端·spring
Java小白笔记11 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
JOJO___13 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server14 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php