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.