Hibernate HQL语句总结

测试POJO(Employee类):

public class Employee implements java.io.Serializable
{

	// Fields

	private Integer id;
	private String name;
	private String email;

	// Constructors

	/** default constructor */
	public Employee()
	{
	}

	/** full constructor */
	public Employee(String name, String email)
	{
		this.name = name;
		this.email = email;
	}

	// Property accessors

	public Employee(Integer id, String name, String email)
	{
		super();
		this.id = id;
		this.name = name;
		this.email = email;
	}

	public Integer getId()
	{
		return this.id;
	}

	public void setId(Integer id)
	{
		this.id = id;
	}

	public String getName()
	{
		return this.name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getEmail()
	{
		return this.email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

}

1、实体对象查询 (查询整个映射对象所有字段)

//该语句可获取已封装好的User对象的集合
			ts = session.beginTransaction();
			String hql = "from Employee";
			Query query = session.createQuery(hql);
			List<Employee> list = query.list();
			for(Employee emp:list)
			{
				System.out.println("id: " + emp.getId() + ",name: " + emp.getName() + ",email为: " + emp.getEmail());
			}
			ts.commit();

2、查询字段

不能通过select   * 将所有字段全部查出,这会对性能造成影响。HQL中,可以只查询部分字段。

//该语句可获取已封装好的Object类型的数组的集合,失去了原有的对象状态,破坏了数据的封装性
			ts = session.beginTransaction();
			String hql = "select id,name,email from Employee";
			Query query = session.createQuery(hql);
			List<Object[]> list = query.list();
			for(Object[] object:list)
			{
				System.out.println("id: " + object[0] + ",name: " + object[1] + ",email为: " + object[2]);
			}
			ts.commit();

3、动态实例化对象查询

通过new关键字对实体对象动态实例化,这可以对数据做出封装,既不失去数据封装性,又可提高查询效率。

			//该语句返回的是Employee对象的集合
			ts = session.beginTransaction();
			String hql = "select new Employee(id,name,email) from Employee";
			Query query = session.createQuery(hql);
			List<Employee> list = query.list();
			for(Employee emp:list)
			{
				System.out.println("id: " + emp.getId() + ",name: " + emp.getName() + ",email为: " + emp.getEmail());
			}
			ts.commit();

4、修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回

			ts = session.beginTransaction();
			//dql语句中的list中的l为小写
			String hql = "select new list(id,name,email) from Employee";
			Query query = session.createQuery(hql);
			List<List> list = query.list();
			for(List empList:list)
			{
				System.out.println("id: " + empList.get(0) + ",name: " + empList.get(1) + ",email为: " + empList.get(2));
			}
			ts.commit();

5、修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回

	ts = session.beginTransaction();
			//dql语句中的map中的m为小写
			String hql = "select new map(id,name,email) from Employee";
			Query query = session.createQuery(hql);
			List<Map> list = query.list();
			for(Map map:list)
			{
				//一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值
				//如果将hql改为:String hql = " select new map(id as id,name as username,email as userEmail)from Users";
				//,那么key将不是字符串0,1,2...了,而是"id","username","userEmail"了 
				System.out.println("id: " + map.get("0") + ",name: " + map.get("1") + ",email为: " + map.get("2"));
			}
			ts.commit();

6、条件查询

1)“?” 号代表参数

			ts = session.beginTransaction();
			String hql = "from Employee emp where emp.id=?";
			Query query = session.createQuery(hql);
			//为HQL参数赋值
			query.setParameter(0, 1);
			List<Employee> list = query.list();
			for(Employee emp:list)
			{
				System.out.println("id: " + emp.getId() + ",name: " + emp.getName() + ",email为: " + emp.getEmail());
			}
			ts.commit();

2)自定义参数名称

			ts = session.beginTransaction();
			String hql = "from Employee emp where emp.id=:userId";
			Query query = session.createQuery(hql);
			//为HQL参数赋值
			query.setParameter("userId", 1);
			List<Employee> list = query.list();
			for(Employee emp:list)
			{
				System.out.println("id: " + emp.getId() + ",name: " + emp.getName() + ",email为: " + emp.getEmail());
			}
			ts.commit();

7、update数据

			ts = session.beginTransaction();
			String hql = "update Employee set name='testtest' where id=1";
			Query query = session.createQuery(hql);
			//为HQL参数赋值
			query.executeUpdate();
			ts.commit();


参考资料:http://www.cnblogs.com/focusChen/articles/2401892.html









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值