Java 进阶 - SpringJPA 持久层框架

发布时间 2023-05-27 10:03:00作者: 济南市第一暖男

参考资料

https://spring.io/projects/spring-data-jpa

介绍

Spring Data JPA 是 Spring 基于 ORM(Object Relational Mapping) 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率。

查询操作

1、jpql 查询,也可以通过 :参数名字 + param 注解代替 ?

@Query("  from User as u where u.username = ?1")
List<User> findByUsername(String username);

2、规定方法明查询,按照 JPA 关键词命名方法名即可。

User findByNameAndAge(String name, int age);

3、Query By Example 查询,只支持字符串的操作。

User user = new User();
user.setId(id);
Example<User> userExample = Example.of(user);
userRepository.findOne(userExample).orElse(null); 

4、Querydsl 查询。

QBlogInfo qBlogInfo = QBlogInfo.blogInfo;
queryFactory.select(qBlogInfo)
    .from(qBlogInfo)
    .where(qBlogInfo.id.eq(1)) 相当于 select * from blog_Info where id = 1;

5、Specification 查询

public void queryUserInfo (String userCode, String sex) {
        List<UserInfo> userList = = repository.findAll((Specification<UserInfo>) (r, q, b) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (StringUtils.isNotBlank(userCode)) {
                //equal等于
                predicates.add(b.equal(r.get("userCode"), userCode));
            }
            if (StringUtils.isNotBlank(sex)) {
                //notEqual不等于
                predicates.add(b.notEqual(r.get("sex"), sex));
            }
            //isNotNull非空
            predicates.add(b.isNotNull(r.get("id")));
            //isNull空
            predicates.add(b.isNull(r.get("nikeName")));
            return b.and(predicates.toArray(new Predicate[0]));
        });
    }

关联操作

1、@OneToOne 注解可以实现一对一操作,例如关联查询和关联删除。

2、@OneToMany 注解可以实现一对多操作,例如关联查询和关联删除。

乐观锁

想要实现乐观锁可以通过 @Version 注解标注在某个字段上。其支持的类型有如下四种,int,short,long,TimeStamp。