Spring Data Jpa使用 EntityManager 自定义复杂查询

1、简介

在Spring Data Jpa中,通过JpaRepository接口提供了单表的CRUD操作,通过JpaSpecificationExecutorSpecification接口可以构建单表和多表的动态查询。
但是,在一些特殊场景下,仍然需要我们通过EntityManager来自定义复杂查询。

2、环境准备

  • 数据库:mysql
  • 项目搭建:演示项目通过Spring Boot 2.2.6构建,引入spring-boot-starter-data-jpa

2.1 实体类

  • 学校 :学生 = 1 对 多
@Entity
@Table(name = "test_school")
@Getter
@Setter
public class SchoolEntity {
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String schoolName;
    
    @OneToMany(mappedBy = "school")
    private List<StudentEntity> students = new ArrayList<>();
}
@Entity
@Table(name = "test_student")
@Getter
@Setter
public class StudentEntity {
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String studentName;
    private Integer age;
    private String address;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "school_id")
    private SchoolEntity school;
}

3、示例

3.1 注入EntityManager

	// 注入EntityManager
    @PersistenceContext
    private EntityManager entityManager;

3.2 指定字段查询

3.2.1 查询单个结果的单个字段

	@Override
    public String getStudentName(Long id) {
   
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<String> query = cb.createQuery(String.class);
        Root<StudentEntity> root = query.from(StudentEntity.class);

        // 查询单个参数
        query.select(root.get("studentName")).where(cb.equal(root.get("id"), id));

        // 查询结果只有1条数据
        return entityManager.createQuery(query).getSingleResult();
    }
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值