JPA中jpql的实现(面向对象化SQL语句)

Posted jiangchanglin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA中jpql的实现(面向对象化SQL语句)相关的知识,希望对你有一定的参考价值。

package com.jcl.test;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import com.jcl.pojo2.Dept;
import com.jcl.pojo2.Emp;

/**
 * 请使用scott登陆Oracle数据库,并按下列要求写出对应的JPQL查询语句:   
1)要求查询出雇员是 7369, 7499, 7521 的雇员的具体信息   
2)要求查询出雇员不是 7369, 7499, 7521 的雇员的具体信息   
3)要求查询出姓名是 smith, allen, king 的雇员信息   
4)查询出雇员姓名中包含字母 M 的雇员信息   
5)要求查询出在 1981 年雇佣的雇员信息   
6)查询出没有员工的部门信息  
7)查询出没有指定部门的员工信息  
8)分页查询员工信息,每页显示4条  
9)查询出所有员工及所在的部门信息(使用连接)  
10)查询出所有部门及每个部门的员工信息(使用连接)  
11)统计出一共有多少个员工  
12)查询出某个领导管理的员工信息  
13)查询出某个员工的领导信息  
14)查询出没有领导的员工信息  
15)查询出入职时间最长的员工信息  
16)统计出各年的入职人数  
17)统计出员工的平均工资  
18)统计出不同职务的员工人数  
19)统计出每个部门的员工人数  
20)统计出有津贴和没有津贴的人数各有多少人  
 * @author lin
 *
 */
public class Demo2 {
    EntityManager em;
    EntityTransaction tx ;
    EntityManagerFactory factory;
    private String jpql;
    @Before
    public void init(){
         factory = 
                Persistence.createEntityManagerFactory("HomeWork-JPQL");
         em = factory.createEntityManager();
         tx = em.getTransaction();
         tx.begin();
    }
    @After
    public void destroy(){
        tx.commit();
        if(em!=null){
            em.close();
        }
        if(factory!=null)
            factory.close();
    }
    
    @Test
    public void test20() {
        //查询有津贴的人数
        jpql="select count(e.comm) from Emp e";
        Long singleResult = em.createQuery(jpql,Long.class).getSingleResult();
        System.out.println("有津贴的人数:"+singleResult);
        //查询总人数
        String jpql2="select count(*) from Emp e";
        Long singleResult2 = em.createQuery(jpql2,Long.class).getSingleResult();
        Long nocomm=singleResult2-singleResult;
        System.out.println("没有津贴的人数为:"+nocomm);
    }
    public void test19() {
        jpql="select e.dept.deptno,count(e.dept.deptno) from Emp e group by e.dept.deptno";
        List<Object[]> resultList = em.createQuery(jpql).getResultList();
        for (Object[] objects : resultList) {
            System.out.println("部门为:"+objects[0]+"	的人数"+objects[1]);
        }
    }
    public void test18() {
        jpql="select e.job,count(e.job) from Emp e group by e.job";
        List<Object[]> resultList = em.createQuery(jpql).getResultList();
        for (Object[] objects : resultList) {
            System.out.println("职务为:"+objects[0]+"	的员工人数:"+objects[1]);
        }
    }
    public void test17() {
        jpql="select avg(e.sal) from Emp e";
        Double singleResult = em.createQuery(jpql,Double.class).getSingleResult();
        System.out.println("员工的平均工资是:"+singleResult);
    }
    public void test16() {
        jpql="select distinct to_char(e.hiredate,‘yyyy‘),count(*) from Emp e "
                + "group by to_char(e.hiredate,‘yyyy‘)";
        List<Object[]> resultList = em.createQuery(jpql,Object[].class).getResultList();
        for (Object[] objects : resultList) {
            System.out.println("入职年份:"+objects[0]+"入职人数:"+objects[1]);
        }
    }
    public void test15() {
        jpql="select e from Emp e where e.hiredate=(select min(e.hiredate) from Emp)";
        List<Emp> resultList = em.createQuery(jpql,Emp.class).getResultList();
        System.out.println("入职时间最长的员工信息:"+resultList.get(0));
    }
    public void test14() {
        jpql="select e from Emp e where e.mgr is null";
        List<Emp> resultList = em.createQuery(jpql,Emp.class).getResultList();
        for (Emp emp : resultList) {
            System.out.println("没有领导的员工信息:"+emp);
        }
    }
    public void test13() {
        //查出领导编号
        jpql="select e.mgr from Emp e where e.empno= ?0";
        BigDecimal singleResult = em.createQuery(jpql,BigDecimal.class)
                                                .setParameter(0, 7369L)
                                                .getSingleResult();
        //根据编号查信息
        List<Emp> resultList = em.createQuery("select e from Emp e where e.empno=?0",Emp.class)
                .setParameter(0, singleResult.longValue()).getResultList();
        for (Emp emp : resultList) {
            System.out.println("员工号7369的领导信息:"+emp);
        }
    }
    public void test12() {
        jpql="select e from Emp e where e.mgr= ?0";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                        .setParameter(0, new BigDecimal(7698))
                                        .getResultList();
        for (Emp emp : resultList) {
            System.out.println("属于7698领导下的员工信息:"+emp);
        }
    }
    public void teat11() {
        jpql="select count(*) from Emp e";
        Long count = em.createQuery(jpql,Long.class).getSingleResult();
        System.out.println(count);
    }
    
    public void test10() {
        jpql="select e from Emp e left  join fetch e.dept d";
        List<Emp> list = em.createQuery(jpql,Emp.class).getResultList();
        for (Emp emp : list) {
            System.out.println(emp);
        }
    }
    
    public void test9() {
        jpql="select e from Emp e inner join fetch e.dept d";
        List<Emp> list = em.createQuery(jpql,Emp.class).getResultList();
        for (Emp emp : list) {
            System.out.println(emp);
        }
    }
    @Ignore
    public void test8() {
        jpql="select e from Emp e";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                        .setFirstResult(0)
                                        .setMaxResults(4)
                                        .getResultList();
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
    @Ignore
    public void test7() {
        jpql="select e from Emp e where e.dept is null";
        List<Emp> resultList = em.createQuery(jpql,Emp.class).getResultList();
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
    @Ignore
    public void test6() {
        jpql="select d from Dept d where d.emps is empty";
        List<Dept> resultList = em.createQuery(jpql,Dept.class).getResultList();
        for (Dept dept : resultList) {
            System.out.println(dept);
        }
    }
    @Ignore
    public void test5() {
        jpql="select e from Emp e where to_char(e.hiredate,‘yyyy‘)=?0";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                    .setParameter(0,"1981")
                                    .getResultList();
        //sdfmat.parse("1981")
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
    @Ignore
    public void test4() {
        jpql="select e from Emp e where e.ename like ?0";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                    .setParameter(0, "%M%")
                                    .getResultList();
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
    
    @Ignore
    private void test3() {
        jpql="select e from Emp e where e.ename in (?0,?1,?2)";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                    .setParameter(0, "SMITH")
                                    .setParameter(1, "ALLEN")
                                    .setParameter(2, "KING")
                                    .getResultList();
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
    @Ignore
    public void test2() {
        jpql="select e from Emp e where e.empno not in (?0,?1,?2)";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                        .setParameter(0, 7369L)
                                        .setParameter(1, 7499L)
                                        .setParameter(2, 7521L)
                                        .getResultList();
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
    
    @Ignore
    public void test1() {
        jpql="select e from Emp e where e.empno in (?0,?1,?2)";
        List<Emp> resultList = em.createQuery(jpql,Emp.class)
                                        .setParameter(0, 7369L)
                                        .setParameter(1, 7499L)
                                        .setParameter(2, 7521L)
                                        .getResultList();
        for (Emp emp : resultList) {
            System.out.println(emp);
        }
    }
}

 

以上是关于JPA中jpql的实现(面向对象化SQL语句)的主要内容,如果未能解决你的问题,请参考以下文章

Atitit oodbms的查询,面向对象的sql查询jpa jpql hql

JPA

SpringData专题-JPA中的复杂查询

JPA JPQL简介

JavaEE 之 Spring Data JPA

条件查询,SQL,JPQL,HQL