【持久层框架】- SpringData - JPA( 二 )

  • @Table(name = "sys_user"):指明数据库中表的名字实现实体与数据表映射 。
  • @Id:声明主键 。
  • @Column(name = "user_id"):指明是表中的哪个字段 。
  • @GeneratedValue(strategy = GenerationType.IDENTITY): GenerationType.IDENTITY:实现自增
  • 启动项目当我们启动项目的时候,数据库会自动创建表结构 。
    【持久层框架】- SpringData - JPA

    文章插图
    看一下数据库,发现表已经自动创建
    【持久层框架】- SpringData - JPA

    文章插图
    对表操作增加数据首先需要创建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);}}运行结果
    【持久层框架】- SpringData - JPA

    文章插图
    查看数据通过findAll就可以直接获取得到所有的数据 。
    @Testvoid QueryTest() {List<User> all = userRepository.findAll();all.forEach(System.out::println);}就能在控制台中看到:
    【持久层框架】- SpringData - JPA

    文章插图
    分页查找jpa也是实现了分页操作的方法 。通过PageRequest.of(0,1)可以完成分页 。
    @Testvoid PageRequestTest() {userRepository.findAll(PageRequest.of(0,1)).forEach(System.out::println);}其底层对数据库的操作就会加上limit.
    【持久层框架】- SpringData - JPA

    文章插图
    根据ID查找返回是Optional类,User类型的数组
    @Testvoid FindByIdTest() {Optional<User> user = userRepository.findById(1L);System.out.println(user);}
    Java8 新特性Optional类Optional 类新特性
    Optional 类是一个可以为null的容器对象如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象Optional 是个容器:它可以保存类型T的值,或仅保存null 。Optional提供很多有用的方法,这样我们就不用显式进行空值检测Optional 类的引入很好的解决空指针异常
    方法命名规则自定义查询方法命名规则查询就是根据方法的名字,就能创建查询 。需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作 。Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询 。通过jpa的规则要求来实现自己命名查询 。按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时 , 条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写 。框架在进行方法名解析时,会先把方法名多余的前缀截取掉 , 然后对剩下部分进行解析 。
    编写Repository根据一定的规则来编写方法命名 。jpa会自动识别方法名称进行操作 。
    package com.jpa.demo.repository;import com.jpa.demo.domain.User;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.stereotype.Repository;import java.util.List;/** * @author: lyd * @description: UserRepository * @Date: 2022/10/2 */@Repositorypublic interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {//根据nickname查询List<User> findAllByNickName(String str);}通过测试可以看到如下结果:
    【持久层框架】- SpringData - JPA

    文章插图
    在编写repository的时候会有一些规则提示,也就是只有符合这些规则才能够被识别 。这里只是展现了findxxx,实际上还有许多 。
    【持久层框架】- SpringData - JPA

    文章插图
    具体的关键字,使用方法和生产成SQL如下表所示
    【持久层框架】- SpringData - JPA

    推荐阅读