Hibernate数据操作(四)之HQL语句二

一,参数绑定形式

(1)最简单的拼接:

String hql="select user from User as user where user.id="+3;
		Query query=session.createQuery(hql);

(2)占位符传参:

String hql="select user from User as user where user.id=?";
		Query query=session.createQuery(hql);
		query.setInteger(0, 3);

query.setXXXX()第一个参数是下标,以0开始,第二个是参数值。String类型是query.setString()以此类推。

(3)命名参数

	String hql="select user from User as user where user.id=:id";
		Query query=session.createQuery(hql);
		query.setInteger("id", 3);

命名参数以:开头。query.setXXX();第一个参数为不要:的字符串,第二个参数为值。

(4)任意类型参数

		String hql="select user from User as user where user.id=?";
		Query query=session.createQuery(hql);
		query.setParameter(0, 3);

query.setParameter()第一个参数是位置,第二个参数是object类型的所以传什么都可以。

(5)属性绑定参数

	User u=new User();
		u.setName("张武");
		u.setPwd("ABC");
		String hql="select user from User as user where user.name=:name and user.pwd=:pwd";
		Query query=session.createQuery(hql);
		query.setProperties(u);

直接传入bean或者pojo都可以,用命名参数绑定。

二,用uniqueResult()方法获取唯一结果

		String hql="select user from User as user where user.id=?";
		Query query=session.createQuery(hql);
		query.setInteger(0, 1);
		User u=(User) query.uniqueResult();

查询出来大于1条数据的会抛出异常,所以这种情况只能用于查询结果等于1条的。

三,实现数据分页

	String hql="select user from User as user";
		Query query=session.createQuery(hql);
		List qlist=query.setFirstResult(0).setMaxResults(3).list();
		for (User name : qlist) {
			System.out.println(name);
		}

setFirstResult()方法可以看作是查询开始的位置,比如这里的低0条信息开始,setMaxResults()方法可以看作查询多少条信息

,比如这里的3条

测试:

Hibernate数据操作(四)之HQL语句二_第1张图片

四,投影查询

(1)查询结果仅包含一个结果列

Hibernate数据操作(四)之HQL语句二_第2张图片

Hibernate数据操作(四)之HQL语句二_第3张图片

(2)查询结果包含多个结果列

Hibernate数据操作(四)之HQL语句二_第4张图片

Hibernate数据操作(四)之HQL语句二_第5张图片

(3)每条查询结果通过构造方法构造成类

String hql="select new User(name,pwd) from User ";
		Query query=session.createQuery(hql);
		List qlist=query.list();
		for (User name : qlist) {
			System.out.println(name);
		}

注意在使用的时候需要有这样的构造方法,否则会抛出异常,示例。

Hibernate数据操作(四)之HQL语句二_第6张图片

你可能感兴趣的:(SSH框架)