第五章 HQL实用技术(3)

2019-03-28 18:28

public Date getHireDateEnd() { return hireDateEnd; } public void setHireDateEnd(Date hireDateEnd) { this.hireDateEnd = hireDateEnd; } public Date getHireDateStart() { return hireDateStart; } public void setHireDateStart(Date hireDateStart) { this.hireDateStart = hireDateStart; } }

(2)新建一个Tool类,完成把日期字符串转为java.util.Date类型

package util;

import java.text.SimpleDateFormat; publicclass Tool {

/**

* 把日期字符串转为java.util.Date类型 */

publicstatic java.util.Date strToDate(String dateStr,String parttern) throws Exception{ }

}

SimpleDateFormat sdf=new SimpleDateFormat(parttern); return sdf.parse(dateStr);

(3)编写测试类

publicclass test {

/**

* @param args */

publicstaticvoid main(String[] args) {

SessionFactory sessionFactory = null; Session session = null; try {

sessionFactory = new Configuration().configure()

.buildSessionFactory();

session = sessionFactory.openSession();

// 1. 准备查询条件,emoCondition对象封装条件

EmpCondition empCondition = new EmpCondition(); // 职位:CLERK

empCondition.setJob(\); // 工资大于1000

empCondition.setSalary(1000D);

// 入职开始时间:1981-4-1

empCondition.setHireDateStart(Tool.strToDate(\, // 入职结束时间:1985-9-9

empCondition.setHireDateEnd(Tool.strToDate(\,

\));

\));

// 2. 准备hql,hql根据条件动态生成

StringBuilder hql = new StringBuilder(\// 判断职位是否为空

if (null != empCondition.getJob()) { }

// 判断工资是否为空

if (null != empCondition.getSalary()) { }

// 判断入职开始时间是否为空

if (null != empCondition.getHireDateStart()) { }

// 判断入职结束时间是否为空

if (null != empCondition.getHireDateEnd()) { }

// 3. 依据hql构建query对象

Query query = session.createQuery(hql.toString());

// 4. 使用query对象的setProperties()方法为参数赋值,empCondition

hql.append(\); hql.append(\); hql.append(\); hql.append(\);

1=1 \);

对象中封装了条件

query.setProperties(empCondition); }

}

}

// 5. 执行查询,获取查询结果

Iterator it = query.iterate(); while (it.hasNext()) {

System.out.println(\员工编号为 :\ + it.next().getEmpNo()); }

e.printStackTrace(); if (session != null)

session.close();

} catch (Exception e) { } finally {

运行结果为:

下面调整示例6的查询添加,忽略第3个条件的入职结束时间

// 判断入职结束时间是否为空

if (null != empCondition.getHireDateEnd()) { }

hql.append(\);

注销以上代码,运行结果是

四、使用uniqueResult()方法获取唯一结果

使用Query接口提供的list()、iterate()方法获取查询结果集合,还可以使用uniqueResult()方法获取唯一的对象。

P148示例7

publicclass test {

/**

* @param args */

publicstaticvoid main(String[] args) {

SessionFactory sessionFactory = null; Session session = null; try {

}

}

sessionFactory = new Configuration().configure()

.buildSessionFactory();

session = sessionFactory.openSession();

// 设置占位符

String hql = \; Query query = session.createQuery(hql); // 为占位符赋值

query.setParameter(0, \);

// 获取唯一的部门

Dept dept = (Dept) query.uniqueResult();

System.out.println(\部门编号:\ + dept.getDeptNo()); } catch (Exception e) { }

e.printStackTrace(); if (session != null)

session.close();

} finally {

当查询结果不唯一是,不能使用query.uniqueResult()方法,否则会报以下错误信息。

修改代码:

// 获取部门 List list = query.list();

for(Dept dept:list){ }

System.out.println(\部门编号:\ + dept.getDeptName());

运行结果:

五、总结

上面介绍Hibernate的参数绑定机制,HQL参数绑定的两种形式: 方法一:按参数位置绑定 方法二:按参数名字绑定

setParameter()方法用于绑定任意类型的参数

setProperties()方法用于把命名参数与一个对象的属性值绑定,使用时注意命名参数和对象的属性匹配。

参数绑定对NULL是安全的,不会抛出异常 例如:我们将示例7修改

query.setParameter(0, \); 运行结果:

5.3分页和投影 一、实现数据分页查询

通过使用Query接口的setFirstResult(int firstResult)方法和setMaxResults(int maxResults)方法实现。

setFirstResult(int firstResult)方法:用于设置第一条记录的位置。 setMaxResults(int maxResults)方法:用于设置最大返回的记录条数。


第五章 HQL实用技术(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:老年汗病(自主神经功能紊乱)中医诊疗方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: