11.HQL查询

例子1

		//获得Hibernate Session
		Session sess = HibernateUtil.currentSession();
		//开始事务
		Transaction tx = sess.beginTransaction();
		//以HQL语句创建Query对象.
		//执行setString方法为HQL语句的参数赋值
		//Query调用list方法访问查询的全部实例
		List pl = sess.createQuery("select distinct p from Person p "
			+ "join p.myEvents where title = :eventTitle")
			.setString("eventTitle","很普通的事情")
			.list();
		//遍历查询的全部结果
		for (Iterator pit = pl.iterator() ; pit.hasNext(); )
		{
			Person p = (Person)pit.next();
			System.out.println(p.getName());
		}
		//提交事务
		tx.commit();
		HibernateUtil.closeSession();
例子2

		//获得Hibernate Session对象
		Session sess = HibernateUtil.currentSession();
		Transaction tx = sess.beginTransaction();
		//解析出Date对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date start = sdf.parse("2005-01-01");
		System.out.println("系统开始通过日期查找人" + start);
		//通过Session的createQuery方法创建Query对象
		List pl = sess.createQuery("select distinct p from Person p "
			+ "inner join p.myEvents event where event.happenDate "
			+ "between :firstDate and :endDate")
			//设置参数
			.setDate("firstDate",start)
			.setDate("endDate",new Date())
			//返回结果集
			.list();
		//遍历结果集
		for (Iterator pit = pl.iterator() ; pit.hasNext(); )
		{
			Person p = ( Person )pit.next();
			System.out.println(p.getName());
		}
		tx.commit();
		HibernateUtil.closeSession();

例子3

		//获得Hibernate Session
		Session sess = HibernateUtil.currentSession();
		//开始事务
		Transaction tx = sess.beginTransaction();
		//以HQL语句创建Query对象.
		//执行setString方法为HQL语句的参数赋值
		//Query调用list方法访问查询的全部属性
		List pl = sess.createQuery("select distinct p.id,  p.name , p.age "
			+ "from Person p join "
			+ "p.myEvents")
			.list();
		//遍历查询的全部结果
		for (Iterator pit = pl.iterator() ; pit.hasNext(); )
		{
			Object[] objs = (Object[])pit.next();
			System.out.println(java.util.Arrays.toString(objs));
		}
		//提交事务
		tx.commit();
		HibernateUtil.closeSession();
使用规则

hibernate是面对对象的,所以其用法也是面向对象查询的,


1-1.from字句

from Person as p


1-2.关联和连接

内链接

from Person p inner join p.myEvent event where event.happenDate < :endDate
使用格外条件with

from Person p inner join p.myEvent event with p.id > event.id where event.happenDate < :endDate


1-3.select子句

select p.name from Person as p
将属性存入list中

select new list(p.name,...) from Person p


1-4.HQL的聚集函数,跟sql一样

select count(*) from Person as p


1-5.多态查询

使用from Person as p 会把p的子类都查询出来


1-6.where子句

跟sql差不多,主要是把表操作换成类操作

1-7.HQL支持表达式操作

表达式很多例如

select p.name from Person p where id > 0


1-8.指定排序

order by p.name,p.address asc//升序
order by p.name,p.address desc//降序

1-9.groub by子句

使用having对分组的数据进行过滤






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值