hibernate hql

Posted xuhaifeng017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate hql相关的知识,希望对你有一定的参考价值。

1.什么是hql

Hibernate Query LanguageHibernate查询语言,面向的是类和属性

下面开始列子

//1.HQL 检索所有学生集合
@org.junit.Test
public void testselectAllDepts(){
String hql="from Student";
Query query = session.createQuery(hql);
List<Student> list = query.list();
for (Student student:list) {
System.out.println(student.getStuname());
}
}

//2.获取学生的信息
@org.junit.Test
public void testselectSomeRows(){
String hql="from Student d where d.stuname=‘呵呵‘";
Query query = session.createQuery(hql);
List<Student> list = query.list();
for (Student student:list) {
System.out.println(student.getStuname());
}
}

//3.获取部分列
@org.junit.Test
public void testgetMultiColumns(){
String hql="select d.stuname from Student d";
Query query = session.createQuery(hql);
List<String> list = query.list();
for (String dept:list) {
System.out.println(dept);
}
}

//3.获取部分列  多列   List<Objecgt[]>
@Test
public void testgetMultipleColumns(){
String hql="select d.stuname,d.sage from Student d";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] dept:list) {
for (Object item:dept){
System.out.print(item+"===");
}
System.out.println();
}
}

  1.匿名占位符

from Student where stuname = ? 

  2.名称占位符

 from Student where s.stuname = :stuname 

3.绑定命名参数与一个对象的属性值

Session session = HibernateUtil.openSession();

NewsDetail news=new NewsDetail();

news.setNtitle("hibernate");

hibernate 工具类

public class HibernateUtil {

// 初始化一个ThreadLocal对象
@SuppressWarnings("rawtypes")
private static final ThreadLocal sessionTL = new ThreadLocal();
private static Configuration configuration;
private final static SessionFactory sessionFactory;
static {
try {
configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session currentSession() {
//sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
Session session = (Session) sessionTL.get();
// 如果session为null,则打开一个新的session
if (session == null) {
//创建一个数据库连接对象session。
session = sessionFactory.openSession();
// 保存该数据库连接session到ThreadLocal中。
sessionTL.set(session);
}
//sessionTL中get()可以获取该线程上次获取过的数据库连接对象。
return session;
}
/**
* 关闭Session
*/
public static void closeSession(){
Session session = (Session) sessionTL.get();
sessionTL.set(null);
session.close();
}

 

hql实现动态查询

1.检索条件的实体属性

//job
private String job;
//salary
private Double sal;

//入职开始时间
private Date fromDate;

//入职结束时间
private Date endDate;

   2.测试

@Test
public void test05() throws ParseException {
/*准备对象*/
Electronic ex=new Electronic();
/*价格小于等于800.0*/
ex.setPrice(800.0);
/*准备hql,hql根据条件动态生成*/
StringBuilder stringBuilder=new StringBuilder("from Electronic e where 1=1 ");
 /*判断价格是否为空*/
if(ex.getPrice()!=null){
stringBuilder.append("and e.price<=:price");
}
/*3. 依据hql构建query对象*/
Query query=session.createQuery(stringBuilder.toString());
/*使用query对象的setProperties()方法为参数赋值,empCondition对象中封装了条件*/
query.setProperties(ex);
List<Electronic> list = query.list();
/*遍历*/
for (Electronic item:list) {
System.out.println(item.getEid()+"==="+item.getE_code()+"==="+item.getPrice());
}
}


技术分享图片

 

分页查询

uniqueResult()获取唯一对象

setFirstResult(int firstResult) 设置返回结果从第几条开始 ---- 索引从0开始

setMaxResults(int maxResults) 设置本次返回结果记录条数 

 

 

@Test
public void selectPageEc(){
String hql="from Electronic";
Query query = session.createQuery(hql);
int pageSize=3;
int pageIndex=1;
query.setFirstResult((pageIndex-1)*pageSize); //6
query.setMaxResults(pageSize);
List<Electronic> list = query.list();
for (Electronic item:list) {
System.out.println(item.getE_code());
}
}

 

 

 


 































































































































以上是关于hibernate hql的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中Hql查询

Hibernate HQL中的子查询

Hibernate HQL查询语句总结

(转)Hibernate中Hql查询

Hibernate HQL查询 插入 更新(update)实例

Hibernate命名查询