JPQL&乐观锁

本文介绍了JPQL的基本语法,包括JOIN、聚集函数、分页查询和原生SQL查询。重点讨论了事务并发中的乐观锁机制,分析了事务的ACID特性以及并发问题,如第一类丢失更新、脏读、虚读和不可重复读,并提出了相应的解决方案。乐观锁通过Version字段防止并发更新冲突,提供了一种高效的方式处理并发事务。
摘要由CSDN通过智能技术生成

JPQL(JPA的查询语句)

最基本的JPQL的格式

只能写java的类名和属性名

SELECT o[o.property,o.property*] FROM Entity
o

[WHERE conditions]

[GROUP BY conditions]

[HAVING conditions]

[ORDER BY o.property[ASC|DESC]]

JPQL本质是JPA通过antlr-2.7.7.jar翻译成sql并且封装执行的。

JPQL书写规则

JPA的查询语言,类似于sql
1.里面不能出现表名,列名,只能出现java的类名,属性名,区分大小写
2.出现的sql关键字是一样的意思,不区分大小写
3.不能写select * 要写select 别名

集合的操作(size)

集合在JPA中经常出现,对集合的操作(size)

sql里面没有size(最终换成sql的count查询)

注意:使用size就是操作集合,那么我们就必需配置员工与部分双向的关系,让部门也可以找到对应的员工

查询出有员工的部门【size】//必须配置双向一对多:部门和员工

JOIN

JPA中的JOIN和LEFT JOIN(使用SQL/JPQL对比)

sql:select * 表1 join 表2 on 条件

jpql:

 1.不写on子句

 2.模型 模型的别名 join 写前面模型别名.出来的对象属性

Employee e

join e.department d

聚集(组)函数/GROUP/HAVING



1.1.1.  
查询出各个部门员工的平均工资和最高工资【使用聚集函数】



@Test

public
void test15() throws Exception {

  EntityManager entityManager =
JPAUtils.getEntityManager();

  String jpql = "select
avg(o.salary),max(o.salary) from Employee o group by o.department.name";

  Query query =
entityManager.createQuery(jpql);

  List<Object[]> list =
query.getResultList();

  for (Object[] objects : list) {

   
System.out.println(Arrays.toString(objects));

  }

  System.out.println("size:" +
list.size());

  entityManager.close();

}



1.1.2.  
查询出各个项目参与人数报表



//
项目1 3人

//
项目2 2人

@Test

public
void test16() throws Exception {

  EntityManager entityManager =
JPAUtils.getEntityManager();

  //查询出各个项目参与人数(不使用聚合)

  String jpql = "select
o.name,o.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值