hibernate的Session接口提供了get,load等按照id查询单个记录的方法,但是大多数时候,我们查询的是实体类的集合列表,这就需要用到复杂查询了,hibernate提供了类sql语句hql,他可以帮助我们编写复杂的查询语句,来做复杂的增删改查操作。这里介绍hibernate提供的Query接口用法。
Query接口的创建是通过Session来创建的,默认需要传入一个hql语句,比如sess.createQuery(hql)。如果我们需要在hql语句中传入参数,可以调用query.setParameter()等方法,可以做到动态传参。
另外Query提供的list,uniqResult,executeUpdate等方法,他们分别对应如下:
- list:查询列表
- uniqResult:查询唯一记录
- executeUpdate:执行修改或者删除操作
这里以hibernate-core-4.3.10.Final版本为例,为了简单,实体映射采用hibernate注解来实现,构建maven工程:
pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
BaseEntity.java
package com.xxx.hibernate4.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public class BaseEntity implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
protected Integer id;
@Column(name="createdate")
protected Date createDate;
@Column(name="modifydate"