Hibernate进阶(一)Hibernate查询语句HQL

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/86664797

前言

      本章讲解Hibernate查询语句HQL的基本使用

方法

1.概念

HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。

通过以上的说明我们可以知道,它的语法其实是和SQL差不多的。

HQL查询的是类,SQL查询的是表。但是SQL的执行效率要高于HQL。

2.HQL的基本使用

1)查询所有对象

示例:查找全部Emp对象

如果是查询全部的话,那么如同SQL里的“*”一样,这里省略select,直接是from Emp

import cn.edu.ccut.bo.Emp;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

import java.util.List;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        List<Emp> emps = session.createQuery("from Emp").list();
        for(Emp emp : emps){
            System.out.println(emp);
        }
        DBUtil.close();
    }
}

2)条件查询

和SQL一样,后面接where语句即可,示例如下:

import cn.edu.ccut.bo.Emp;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

import java.util.List;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        List<Emp> emps = session.createQuery("from Emp where empno=?").setInteger(0,7369).list();
        for(Emp emp : emps){
            System.out.println(emp);
        }
        DBUtil.close();
    }
}

3)查询指定列

示例:查询Emp下的员工姓名和它的工作

import cn.edu.ccut.bo.Emp;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

import java.util.List;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        List<Object> emps = session.createQuery("select e.ename,e.job from Emp e").list();
        for(Object obj : emps){
            System.out.println(obj);
        }
        DBUtil.close();
    }
}

这个时候我们发现它无法强行转化为Emp,此刻我们需要添加相应的构造方法来进行实现:


 这个时候,我们就可以查询指定列的Emp了!

这个在实际操作中用处很少,简单了解一下即可。

4)模糊查询

道理一样,上代码:

import cn.edu.ccut.bo.Emp;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

import java.util.List;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        List<Emp> emps = session.createQuery("from Emp e where e.ename like ?").setString(0,"S%").list();
        for(Emp obj : emps){
            System.out.println(obj);
        }
        DBUtil.close();
    }
}

 5)聚合函数查询

示例:查询Emp的数量

import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        Long size = (Long)session.createQuery("select count(e.empno) from Emp e").uniqueResult();
        System.out.println(size);
        DBUtil.close();
    }
}

6)分页查询

示例:分页查询emp表数据

import cn.edu.ccut.bo.Emp;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

import java.util.List;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        List<Emp> emps = session.createQuery("from Emp")
                .setFirstResult(0) //(currentPage-1)*pageSize
                .setMaxResults(2)//pageSize
                .list();
        for(Emp obj : emps){
            System.out.println(obj);
        }
        DBUtil.close();
    }
}

7)in查询语法

import cn.edu.ccut.bo.Emp;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class HibernateTest {

    @Test
    public void testHibernateConfig() throws Exception{
        Session session = DBUtil.getSession();
        List<Integer> list = new ArrayList<>();
        list.add(7369);
        list.add(7499);
        List<Emp> emps = session.createQuery("from Emp where empno in :ids")
                .setParameterList("ids",list)
                .list();
        for(Emp obj : emps){
            System.out.println(obj);
        }
        DBUtil.close();
    }
}

注意:这里的  :变量  可以替代 ?

基本的HQL语法就是这样了,我们之前的查询太过于粗糙,HQL正好扩充了其查询功能!

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/86664797
今日推荐