版权声明:程序猴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正好扩充了其查询功能!