Spring Data JPA

一、什么是JPA

它是SUN公司提出的ORM规范

JDBC的接口是各种数据库来实现的,在JPA中实体类和表一一对应,通过ORM框架生成的SQL还是得使用JDBC去操作数据库。

JPA就类似于一个翻译器

二、queryDsl

配置:Spring boot JPA+Gradle+QueryDSL 完美配置生成Q文件依赖_spring boot使用 gradle 整合 jpa querydsl-jpa-CSDN博客

1.语句 

①实现QueryDslPredicateExecutor

Querydsl扩展能让我们以链式方式代码编写查询方法。该扩展需要一个接口QueryDslPredicateExecutor,它定义了很多查询方法。Repository实现这个接口,可以进行链式编程。

等于 EQ : equal .eq
不等于 NE : not equal .ne
小于 LT : less than .lt
大于 GT : greater than .gt
小于等于 LE : less than or equal .loe
大于等于 GE : greater than or equal .goe
@Autowired
CustomerDslRepository repository;

@Test
public void test02(){
    QCustomer qCustomer = QCustomer.customer;

    Iterable<Customer> all = repository.findAll(qCustomer.id.in(1L,5L)
             .and(qCustomer.firstName.in("徐庶", "王五")));

    System.out.println(all);
}

 ②自定义查询

创建factory工厂

@Configuration
public class SpringDataJPAConfig {

    @Bean
    public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
        return new JPAQueryFactory(entityManager);
    }
}

 自定义语句:

private final JPAQueryFactory jpaQueryFactory;

@Test
public void test01(){
    QCustomer qCustomer = QCustomer.customer; 

    QueryResults<Tuple> tupleQueryResults = queryFactory
        .select(qCustomer.id.sum(), qCustomer.id)
        .from(qCustomer)
        .where(qCustomer.id.between(1, 2))
        .orderBy(qCustomer.id.desc())
        .groupBy(qCustomer.id)
        .fetchResults();
    
    for (Tuple result : tupleQueryResults.getResults()) {
        System.out.println(result.get(qCustomer.id));
        System.out.println(result.get(qCustomer.id.sum()));
    }
}

@Test
public void test02(String custName){
    QCustomer qCustomer = QCustomer.customer; 

    System.out.println(jpaQueryFactory
        .select(qCustomer)
        .from(qCustomer)
        .where(qCustomer.custName.eq(custName))
        .fetchFirst());
}

 2.多表操作

一对一,OneToOne

注意注释中的配置信息

多对一:ManyToOne

当插入“多”的数据时,使用多对一的关联关系更合适        
通过”一“的数据进行条件查询时,使用一对多的关联关系更合适
通过“多”的数据状态进行条件查询时,使用多对一的关联关系更合适

联想用户和订单表的关系

多对多:ManyToMany

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值