接下来就可以开始体验jpa了
创建实体类可见通过注解可以实现实体与数据库的直接映射,jpa操作的就是这些实体就等同操作数据库的表结构 。
package com.jpa.demo.domain;import lombok.Data;import javax.annotation.Generated;import javax.persistence.*;import java.io.Serializable;/** * @author: lyd * @description: 实体User * @Date: 2022/10/2 */@Data@Entity@Table(name = "sys_user")public class User implements Serializable {@Id@Column(name = "user_id")@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增private Long id;private String username;private String nickName;private String password;}
- @Data:lombok下的注解,主要是方便开发,减少对get、set、tostring的编写 。这个需要导入相应的依赖坐标 。
- @Entity:声明是一个实体 。
- @Table(name = "sys_user"):指明数据库中表的名字实现实体与数据表映射 。
- @Id:声明主键 。
- @Column(name = "user_id"):指明是表中的哪个字段 。
- @GeneratedValue(strategy = GenerationType.IDENTITY): GenerationType.IDENTITY:实现自增

文章插图
看一下数据库,发现表已经自动创建

文章插图
对表操作增加数据首先需要创建UserRepository接口,要通过继承JpaRepository<T, ID>,提供实体类和id的类型 。
/** * @author: lyd * @description: UserRepository * @Date: 2022/10/2 */@Repositorypublic interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {}
编写测试类通过调用save方法即可完成保存操作package com.jpa.demo.test;import com.jpa.demo.domain.User;import com.jpa.demo.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.junit.jupiter.api.Test;/** * @author: lyd * @description: 测试类 * @Date: 2022/10/2 */@SpringBootTestpublic class JpaTest {@Autowiredprivate UserRepository userRepository;@Testvoid InsertTest() {User user = new User();user.setNickName("怒放吧德德");user.setUsername("lyd_code");user.setPassword("lyd_open");User save = userRepository.save(user);System.out.println(save);}}
运行结果
文章插图
查看数据通过findAll就可以直接获取得到所有的数据 。
@Testvoid QueryTest() {List<User> all = userRepository.findAll();all.forEach(System.out::println);}
就能在控制台中看到:
文章插图
分页查找jpa也是实现了分页操作的方法 。通过PageRequest.of(0,1)可以完成分页 。
@Testvoid PageRequestTest() {userRepository.findAll(PageRequest.of(0,1)).forEach(System.out::println);}
其底层对数据库的操作就会加上limit.
文章插图
根据ID查找返回是Optional类,User类型的数组
@Testvoid FindByIdTest() {Optional<User> user = userRepository.findById(1L);System.out.println(user);}
Java8 新特性Optional类Optional 类新特性方法命名规则自定义查询方法命名规则查询就是根据方法的名字,就能创建查询 。需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作 。Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询 。通过jpa的规则要求来实现自己命名查询 。按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写 。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析 。
Optional 类是一个可以为null的容器对象如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象Optional 是个容器:它可以保存类型T的值,或仅保存null 。Optional提供很多有用的方法,这样我们就不用显式进行空值检测Optional 类的引入很好的解决空指针异常
经验总结扩展阅读
- 如何正确饲养小松鼠
- 炖汤飞水啥意思
- 如何跟女生如何聊天
- 书旗小说今天推荐的小说有哪些
- 三星C7000怎么打开USB
- 形容多而密的词语
- 电脑屏幕144hz是什么意思
- 什么是猪下青
- 形容腊梅花的优美句子
- 进入终面意味着什么