测试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