您的位置:首页 > 其它

Hibernate HQL语句总结

2014-08-14 08:52 465 查看

测试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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: