我是靠谱客的博主 靓丽季节,最近开发中收集的这篇文章主要介绍Springdata Jpa使用规范,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Repository:

1. Repository:最顶层的接口,一个空的接口,统一所有的Repository类型,并且能够让组件扫描的时候能够自动识别

2. CrudRepository: Repository的子接口,提供CRUD的操作

3. PagingAndSortingRepository: CrudRepository的子接口,添加了分页和排序的功能

4. JpaRepository: 是PagingAndSortingRepository的子接口,增加一些实用的功能,比如批量操作

5. JpaSpecificationExecutor:来定义复杂查询

@Entity表示这个类是一个实体类,参与JPA和数据库表的映射

@Table表示具体映射的表名

@Id表示这个字段是主键,@GeneratedValue表示这个主键的生成策略

@Column表示映射到数据库的表的字段名,字段名和表字段不一致,修改注解@Column的name属性
 

public interface UserRepository extends JpaRepository<User,Integer>, JpaSpecificationExecutor<User> {
   
}

//继承JpaRepository方便直接调用现有的方法进行CRUD,
//继承JpaSpecificationExecutor则是方便定义一些复杂的查询

原生SQL与JPQL:

定义方法时候,上面加上注解@Query,默认nativeQuery是false,此时value填入的是JPQL语句,修改nativeQuery是true,就能够写入SQL语句

//@Query注解里面写JPQL语句,定义查询
    @Query(nativeQuery = false,value = " SELECT p FROM User p WHERE id = ?1")
    User readId(Integer id);
    //Query注解也可以定义SQL语句,只要将nativeQuery属性改为true
    @Query(nativeQuery = true, value = "select name from user where id = :id")
    String findNamebyId(@Param("id")Integer id);

update/delete操作需要事务支持,必须在service层,添加事务,因为spring data,默认情况下每个方法是只读事务,不能完成update/delete操作。在@Query注解中定义,必须加上@Modify,告诉spring data 这是一个update/delete操作。

模糊查询:

//模糊查询
    @Query(nativeQuery = true,value = " select  * from user where name like %?1% ")
    User findUserByLikeName(String name);

分页查询:

 

定义分页查询,只需要将查询的参数和分页对象作为参数。

 Page<User> findByNameLike(String str , Pageable pageable);
public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}


增加countQuery属性,用于总数的统计  可以不要
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class SpringDataTest {
    @Autowired
    private UserRepository repository;
    @Test
    public void test(){
       /**
        * SpringData jpa 的分页
        * Pageable接口的实现类是PageRequest,Page接口的实现类是PageImpl。
        */
       Pageable page = new PageRequest(0,2,new Sort(Sort.Direction.DESC,"id"));
       Page<User> personList =  repository.findByLastname("张%",page);
        System.out.println("总记录数" + personList.getTotalElements());
        System.out.println("当前第几页: " + (personList.getNumber() + 1));
        System.out.println("总页数: " + personList.getTotalPages());
        System.out.println("当前页面的记录数:" + personList.getContent());
        System.out.println("当前页面的记录数: " + personList.getNumberOfElements());
    }
}

ort对象,定义排序规则,常用的是下面这种构造函数,支持可变参数的

public Sort(Sort.Direction direction, String... properties) {
        this(direction, (List)(properties == null ? new ArrayList() : Arrays.asList(properties)));
    }

 

 

 

最后

以上就是靓丽季节为你收集整理的Springdata Jpa使用规范的全部内容,希望文章能够帮你解决Springdata Jpa使用规范所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(295)

评论列表共有 0 条评论

立即
投稿
返回
顶部