HQL语句查询
1.HQL语句是支持持久化对象,依赖于Query类进行HQL查询
2.Query接口通过Session对象session中生成,createQuery()方法用于执行HQL语句
(1) Query query = session.createQuery("from User a where a.objId like ? and a.userName like ?");
(2)Query query = session.createQuery("from User a where a.objId like : id and a.userName like : userName ");
3.Query的set()方法用来设置HQL语句中?的值或变量的值
(1)eg.setString(int position,String vlaue) 其中position代表 ”?” 在HQL中的位置,value为 ”?” 设置的值
query.setInteger(0,21);
query.setString(1,"%XiaoLiZi%");
(2)eg.setString(String paraName,String value) 其表HQL中”:”后跟变量,value代表变量的值
query.setInteger("id",21);
query.setString("userName","%XiaoLiZi%");
4.Query的list()方法:返回查询结果,并把查询结果转变为 List对象
List list = query.list();
while(int i = 0; i < list.size(); i++)
{
user = (User)list.get(i);
System.out.println(user.getUserName());
}
5.query的executeUpdate()方法用于执行更新或删除语句。
query.executeUpdate();
6.Hibernate也支持原生Sql语句的查询
Hibernate SQL 查询是通过 SQLQuery 接口来表示,SQLQuery接口是 Query 接口的子接口,因此完全可以调用 Query 接口的方法。
String sql = "select a.* from User a where a.userName like '"+userName+"%'";
Session session = this.getSession();
//addEntity: 将SQL表的别名和实体类联系起来,确定查询结果集的形态
SQLQuery sqlQuery = session.createSQLQuery(sql).addEntity("a",User.class);
List list =sqlQuery. list();
for(Object obj:new HashSet(list))
{
User user = (User)obj;
System.out.println(user.getObjId()+","+user.getUserName());
}
7.设置分页查询
Query接口提供了用于分页显示查询结果的方法:
– setFirstResult(int firstResult):设定从哪一个对象开始检索,参数firstResult表示这个对象在查询结果中的索引位置,
索引位置的起始值为0。默认情况下,Query接口从查询结果中的第一个对象,也就是索引位置为0的对象开始检索。
– setMaxResult(int maxResults):设定一次最多检索出的对象数目。默认情况下,Query接口检索出查询结果中所
有的对象
query.setFirstResult((currentPage - 1) * pageSize); //currentPage为当前页,pageSize为每页显示的记录集数
if(pageSize != -1)
{
query.setMaxResults(pageSize);
}