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]+"\t的人数"+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]+"\t的员工人数:"+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);
        }
    }
}

原文地址:https://www.cnblogs.com/jiangchanglin/p/10062493.html

时间: 2024-10-10 01:52:51

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

在雇员表中查找第二高的工资SQL语句助记

        "在雇员表中查找第二高的工资的员工记录"SQL语句怎么写         这个查询首先查找最高工资,然后将它从列表中排除,再查找最高工资.很明显,第二次返回的是第二高工资. select top 1 * from employee where salary not int (select max(salary) from emplyee) order by salary desc 或者 select top 1 * from(select top 2 * from em

Jfinal中使用日志框架输出完整sql语句信息(mysql+oracle)

1.引入Jar包. //必须引入的jar包 log4j-1.2.17.jar log4jdbc4-1.2.jar slf4j-api-1.7.5.jar //二选一的jar包,如果你的项目中已经引入了其中任何一个,就不需要再引入另一个了.同时引入以上两个包会产生堆栈溢出问题,详情可参考这篇文档: http://blog.csdn.net/kxcfzyk/article/details/38613861 slf4j-log4j12-1.7.5.jar 或者 log4j-over-slf4j-1.7

MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句

查询所有数据库占用磁盘空间大小的SQL语句: select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size from information_schema.tables group by TABLE_SCHEMA order by data_lengt

【转载】SQL Server中查询CPU占用高的SQL语句

本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL语句 SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_ex

ORACLE中能否找到未提交事务的SQL语句

  在Oracle数据库中,我们能否找到未提交事务(uncommit transactin)的SQL语句或其他相关信息呢?  关于这个问题,我们先来看看实验测试吧.实践出真知. 首先,我们在会话1(SID=63)中构造一个未提交的事务,如下所: SQL> create table test   2  as   3  select * from dba_objects;   Table created. SQL> select userenv('sid') from dual;   USEREN

jmeter中一次查询多条sql语句

1.在JDBC Connection Configuration 中Database URL 添加: ?allowMultiQueries=true 2.在测试计划页面添加一个用户定义的变量 3.测试计划里面定义的变量,在SQL Query 直接用${id}引用多条SQL语句时 Query Type: 选择[Callable Statement]注意:常使用的Query Type有Select Statement和Update Statement其中Select语句选择Select Statem

C#.NET 大型企业信息化系统集成快速开发平台 4.1 版本 - 面向数据库SQL语句的应用开发一

我的梦想是给大家提供一个工具.可以用他来提高工作效率.就像战争上,你有一个得心应手的武器一个道理.  给大家一个性能良好的信息化武器,就是我的梦想. 有一个朋友来信息如下: 我就是企业维护信息的,也不大编程,懂点吧,但是也忘得差不多.最近看了点书,微软的,java的,我感觉自己数据库语句还行,持久层也就是固定套路,但是控制和表现没有些积累就不大好弄了,比较见功力,特别是表现层,技术也杂.粗略认识吧,我就想做点信息系统,台账之类,你的程序能帮到我吗,有详细说明吗? 我们有充分的例子程序,模板程序,

在Hibernate中使用HibernateTemplate来进行包含sql语句的查询

/**     * 使用sql语句进行查询操作     * @param sql     * @return     */    public List queryWithSql(final String sql){        List list = hibernateTemplate.executeFind(new HibernateCallback() {            public Object doInHibernate(Session session) throws Hib

如何随机从数据库表中抽一条数据的SQL语句

NewID() 方法返回一个 GUID,如:EE95A489-B721-4E8A-8171-3CA8CB6AD9E4 在 select 表的时候,再增加一列为 NewID() 就可以了. SQL 语句:select *, NewID() from table 这样每条记录后就会有一个随机的 GUID 值,我们再按这个 GUID 排一下序就可以达到乱序的效果. SQL 语句:select *, NewID() as random from table order by random 我们要想随机取