JPQL(JPA的查询语句)

1.最基本的JPQL的格式

1.1 只能写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并且封装执行的。

.1.2学JPQL记住两个点
1.JPQL和SQL很像,查询关键字都是一样的
2.唯一的区别是:JPQL是面向对象的
1.3.JPQL书写规则
JPA的查询语言,类似于sql
1.里面不能出现表名,列名,只能出现java的类名,属性名,区分大小写
2.出现的sql关键字是一样的意思,不区分大小写
3.不能写select * 要写select 别名

下面是整体的查询思路,以及各种查询练习
getset tosting省略

Department 类

	 @Id
    @GeneratedValue
    private Long id;
    private String name;
    private String provice;
    private String city;
    private String street;
    private String sn;
    // 多对一,多个部门由一个部门经理管理
    @ManyToOne(fetch = FetchType.LAZY)
    private Department manager;
    // 双向一对多:当前部门有那些员工
    @OneToMany(mappedBy = "department")
    private Set<Employee> employees = new HashSet<>();
  

Employee类

@Id
    @GeneratedValue
    private Long id;
    private String name;
    private BigDecimal salary;
    private Date hireDate;
    @ManyToOne(fetch = FetchType.LAZY)
    private Department department;

Phone类

@Id
    @GeneratedValue
    private Long id;
    private String types;
    private String number;
    // 多对一:多个电话属于同一个员工
    @ManyToOne(fetch = FetchType.LAZY)
    private Employee employee;

Project类

@Id
    @GeneratedValue
    private Long id;
    private String name;
    // 多对一,多个项目由同一个项目经理管理
    @ManyToOne
    private Employee manager;
    @ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
    @JoinTable(name = "project_employee",joinColumns = {@JoinColumn(name = "project_id")},inverseJoinColumns = {@JoinColumn(name = "employee_id")})
    private Set<Employee> employees = new HashSet<>();
//查询全部员工
 @Test
    public void testName() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();
        String jpql = "select e from Employee e";
        Query query = entityManager.createQuery(jpql);
        List<Employee> list = query.getResultList();
        for (Employee employee : list) {
            System.out.println(employee);
        }
    }
 */
    //2.2.2.查询所有员工的姓名和所属部门名称【查询特定属性】
    @Test
    public void testQuery1() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();
        String jpql = "select e.name,e.department from Employee e";
        Query query = entityManager.createQuery(jpql);
        List<Object[]> resultList = query.getResultList();
        for (Object[] o : resultList) {
            System.out.println(Arrays.toString(o));
        }
    }
    @Test
    public void testQuery1_1() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();
        //这里这样写的话 需要在实体类里面添加一个有参构造,然后在加一个无参构造
        String jpql = "select new Employee(e.name,e.department.name) from Employee e ";
        Query query = entityManager.createQuery(jpql);
        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj.getName()+"---"+obj.getDepartment().getName());
        }

    }
 //2.2.3.查询出所有在成都和广州工作的员工【查询结果过滤】
    // insert into table(name,tt) values(?,?)
    @Test
    public void testQuery2() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();

        String jpql = "select e from Employee e where e.department.city like ? or e.department.city like ?";
        Query query = entityManager.createQuery(jpql);
        query.setParameter(1,"成都").setParameter(2, "广州");
        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);
        }

    }
//2.2.4.查询出所有员工信息,按照月薪排序【查询排序】
    @Test
    public void testQuery3() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();

        String jpql = "select e from Employee e  order by e.salary desc ";
        Query query = entityManager.createQuery(jpql);
        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);
        }
    }
 //查询出所有员工信息,按照部门编号排序【使用关联对象属性排序】
    @Test
    public void testQuery4() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();

        String jpql = "select e from Employee e  order by e.department.id  ";
        Query query = entityManager.createQuery(jpql);
        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);
        }
    }
  //查询出在恩宁路和八宝街上班的员工信息【使用IN】
    @Test
    public void testQuery5() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();

        String jpql = "select e from Employee e where e.department.street in (?0,?1) ";
        Query query = entityManager.createQuery(jpql);
        query.setParameter(0, "恩宁路").setParameter(1, "八宝街");

        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);
        }
    }
 //查询出工资在5000-6000的员工【使用BETWEEN..AND..】 【5000,6000】 (5000,6000]
    @Test
    public void testQuery6() throws Exception{

        String jpql = "select e from Employee e  where e.salary between :min and :max ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);
        query.setParameter("min",new BigDecimal("5000")).setParameter("max", new BigDecimal("6000"));

        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);

        }
    }
//2.2.8.查询出姓名包含er或者en的员工【使用LIKE】
    @Test
    public void testQuery7() throws Exception{

        String jpql = "select e from Employee e  where e.name like ? or e.name like ? ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);
        //query.setParameter(1,"%er%");
       // query.setParameter(2, "%en%");
        query.setParameter(1, "%en%" ).setParameter(2, "%er%");
        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);

        }
    }
  //2.3.1.查询出有员工的部门【distinct】
    @Test
    public void testQuery8() throws Exception{

        String jpql = "select distinct e.department from  Employee e ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Department> resultList = query.getResultList();
        for (Department obj : resultList) {
            System.out.println(obj);
        }
    }
 //查询出有员工的部门【size】
    @Test
    public void testQuery9() throws Exception{

        String jpql = "select d  from  Department d where d.employees.size > 0 ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Department> resultList = query.getResultList();
        for (Department obj : resultList) {
            System.out.println(obj);
        }
    }
//查询出部门信息,按照部门的员工人数排序
    @Test
    public void testQuery10() throws Exception{

        String jpql = "select d  from  Department d order by d.employees.size desc ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Department> resultList = query.getResultList();
        for (Department obj : resultList) {
            System.out.println(obj);
        }
    }
 //查询出没有员工参与的项目【对集合使用size】
    @Test
    public void testQuery11() throws Exception{

        String jpql = "select d  from  Department d where d.employees.size = 0";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Department> resultList = query.getResultList();
        for (Department obj : resultList) {
            System.out.println(obj);
        }
    }
 //查询出所有员工及部门名称
    @Test
    public void testQuery12() throws Exception{

        String jpql = "select e.name,d.name  from  Employee e join e.department d ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Object[]> resultList = query.getResultList();
        for (Object[] obj : resultList) {
            System.out.println(Arrays.toString(obj));
        }
    }
 //2.5.2.查询出市场部员工信息及电话
    @Test
    public void testQuery13() throws Exception{

        String jpql = "select e,p from  Phone p  join p.employee e where e.department.name like ?";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);
        query.setParameter(1, "%市场部%");
        List<Object[]> resultList = query.getResultList();
        for (Object[] obj : resultList) {
            System.out.println(Arrays.toString(obj));
        }
    }
//查询出各个部门员工的平均工资和最高工资\
    @Test
    public void testQuery14() throws Exception{

        String jpql = "select e.department.name, avg(e.salary),max(e.salary) from Employee e group by e.department.name ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Object[]> resultList = query.getResultList();
        for (Object[] obj : resultList) {
            System.out.println(Arrays.toString(obj));
        }
    }
 //2.6.2.查询出各个项目参与人数报表
    @Test
    public void testQuery15() throws Exception{

        String jpql = "select  p.id,p.name,p.employees.size from Project p where p.employees.size > 0";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Object[]> resultList = query.getResultList();
        for (Object[] obj : resultList) {
            System.out.println(Arrays.toString(obj));
        }
    }
//2.7.子查询:查询出大于平均工资的员工信息
    @Test
    public void testQuery16() throws Exception{

        String jpql = "select  e from Employee e where e.salary > (select avg(e.salary) from Employee e )";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);

        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);
        }
    }
//分页查询--springdatajpa
    @Test
    public void testQuery17() throws Exception{

        String jpql = "select  e from Employee e ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);
        query.setFirstResult(1).setMaxResults(10);
        List<Employee> resultList = query.getResultList();
        for (Employee obj : resultList) {
            System.out.println(obj);
        }
    }
 //查询员工总共多少条
    @Test
    public void testQuery18() throws Exception{

        String jpql = "select  count(e ) from Employee e ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query query = entityManager.createQuery(jpql);
        List list = query.getResultList();
        System.out.println(list);

    }

    //jpa 还对原生的sql进行支持 --返回值存入对象数组 Object[]
    @Test
    public void testQuery19() throws Exception{

        String sql = "select * from Employee ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query nativeQuery = entityManager.createNativeQuery(sql);

        List<Object[]> list = nativeQuery.getResultList();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }

    }
//返回对象形式
    @Test
    public void testQuery20() throws Exception{

        String sql = "select * from Employee ";
        EntityManager entityManager = JpaUtils.getEntityManager();
        Query nativeQuery = entityManager.createNativeQuery(sql,Employee.class);

        List list = nativeQuery.getResultList();
        for (Object o : list) {
            System.out.println(o);
        }
    }

    @Test
    public void testQuery21() throws Exception{
        EntityManager entityManager = JpaUtils.getEntityManager();
        String sql = "select * from employee where name like ?";
        Query query = entityManager.createNativeQuery(sql,Employee.class);
        query.setParameter(1,"%en%");
        query.setFirstResult(0).setMaxResults(2);
        List<Employee> resultList = query.getResultList();
        for (Employee o : resultList) {
            System.out.println(o);
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值