Loading...
墨滴

itbear

2021/10/13  阅读:20  主题:萌绿

Spring JPA Get Start

什么是JPA?

JPA(Java Persistence API)是JDK 5.0新增的持久层协议,用于通过注解或XML的方式来描述对象和关系型数据里面的表映射关系,并将Java项目运行时的实体对象,持久化到数据库中。

JPA分类

  1. 在 javax.persistence 的包下面定义了一套 API 标准接口,用来操作实体对象,执行 CRUD 操作。
  2. 定义了一套基于对象的 SQL:Java Persistence Query Language(JPQL),可以使用面向对象的方式去查询数据,而不是面向数据库的查询去查询数据
  3. ORM(Object/Relational Metadata)对象注解映射关系,JPA可以 直接通过注解的方式来表示 Java 的实体对象及元数据对象和数据表之间的映射关系,框架将实体对象与一种 Session会话技术 进行关联,通过操作 Session 中不同实体的状态,从而实现持久化数据到数据库中的操作。

Spring Data JPA

Spring Data JPA则是Spring基于ORM框架和JPA规范的基础上封装的一套JPA框架,特点是使用极少的代码即可实现对数据库的访问和操作。并且只需要写接口就可以提供基本的CRUD功能,优点是简化开发、少打代码、CRUDBoy的福音。缺点是体系庞大、易入门难精通。

Get Start

下面通过一个快速开始案例来构建一个以Spring JPA框架为例的CRUD功能.

构建Spring Initializr项目

通过Spring官方提供的一套脚手架可快速的构建Spring Boot工程,并整合Jpa框架

  1. 点击New Project
使用IDEA
使用IDEA
  1. 选择所需依赖项
  • Lombok:省去写get&set方法
  • Spring Data JPA:框架所需依赖
  • MySQL:操作数据库

选择依赖 在创建好项目之后就基于一个User实体进行示例操作。


  • 首先需要编写连接MySQL的配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///jpa?serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=system56

spring.jpa.hibernate.ddl-auto=update # 随之项目的启动更新数据库
spring.jpa.show-sql=true # 是否显示SQL语句

  1. User实体类
package com.renzhell.jpa.entity;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long userId;
    private String username;
    private String phone;
    private Integer age;
    private String email;
}
  1. 新增UserRepository数据层接口

使用JPA有一个好处就是不用编写具体的实现类,或类似于MyBatis一样的SQL文件,只需要写接口并继承框架提供的接口,即可对数据库进行增删改查操作。

package com.renzhell.jpa.repositories;
import com.renzhell.jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

public interface UserRepository extends 
JpaRepository<UserLong>
{}// 第一个参数是指定操作的实体类,第二个参数则是实体类的主键id数据类型

  1. 创建测试类,调用对应的操作方法
package com.renzhell.jpa.user;
// 省去导入代码
@Slf4j
@SpringBootTest
public class UserTest {
  @Autowired
  private UserRepository userRepository;
  /**
   *  调用save插入一条用户数据
   */

  @Test
  void insert() {
      User user = new User();
      user.setUserId(1L);
      user.setUsername("renzhell");
      user.setAge(21);
      user.setPhone("16638224118");
      user.setEmail("bearpess@gmail.com");
      User userData = userRepository.save(user);
      log.info("新增的用户数据:==> {} ", userData);
  }
  /**
   *  根据数字id删除User信息
   */

  @Test
  void delete() {
      userRepository.deleteById(1L);
  }
  /**
   *  更新和新增共用一个方法,不同的是更新需要明确指定id值
   */

  @Test
  void update() {
      User user = new User();
      user.setUserId(1L);
      user.setPhone("110");
      user.setAge(20);
      User modifiedData = userRepository.save(user);
      log.info("修改后的用户信息:==> {} ", modifiedData);
  }
  /**
   *   调用findAll方法查询所有
   */

  @Test
  void query() {
      List<User> userList = userRepository.findAll();
      userList.forEach(System.out::println);
  }
}

Done...

itbear

2021/10/13  阅读:20  主题:萌绿

作者介绍

itbear