是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式
语法:[select/update/delete……] from Entity [where……] [group by……] [having……] [order by……]
(1).没使用Spring框架的写法:
使用HQL需要四步
得到Session、编写HQL语句、创建Query对象(Query接口是HQL 查询接口。它提供了各种的查询功能)、执行查询,得到结果
sessionFactory =
new Configuration().configure().buildSessionFactory()
session = sessionFactory.openSession()
String hql = “from Street”
Query query = session.createQuery(hql)
List<Street>list = query.list()
(2).使用Spring框架的写法:
String queryString = "select form entity ...."
List list=getHibernateTemplate().find(queryString)
第二种方式:Criteria 查询
Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;
就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件
由Hibernate 自动产生SQL 查询语句
(1).没使用Spring框架的写法;
Criteria由Hibernate Session进行创建
SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory()
Session session = sessionFactory.openSession()
Criteria criteria = session.createCriteria(User.class)
List result = criteria.list()
Iterator it = result.iterator()
(2)使用Spring框架的写法:
import org.hibernate.criterion.DetachedCriteria
DetachedCriteria criteria=DetachedCriteria.forClass(ObjectEntity.class)
criteria.add(Restrictions.eq("propertyName", propertyValue))
List result=getHibernateTemplate().findByCriteria(criteria)
第三种方式:使用SQL语句查询(以下都是使用了Spring框架的写法)
1).这是把执行结果放到了一个类里:(这个类通常使用VO实体,VO实体一般就只用来接收查询结果)
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
StringBuffer hqlBuffer = new StringBuffer("")
hqlBuffer.append("select column_Name from ...")//里面是SQL语句
SQLQuery sqlQuery = session.createSQLQuery(hqlBuffer.toString())
sqlQuery.addScalar("propertyName",Hibernate.STRING)//该propertyName是ObjectVO实体的一个属性
sqlQuery.setResultTransformer(Transformers.aliasToBean(ObjectVO.class))
List list = sqlQuery.list()
return list//此处list集合中存放的是ObjectVO对象
}
})
2).返回结果放到list中的:
final String queryString = ""//sql语句
List resultList=getHibernateTemplate().executeFind(new HibernateCallback() {
public List doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery sqlQuery = session.createSQLQuery(queryString)
List list=sqlQuery.executeUpdate()
return list
}
})
3).无返回结果:
final String queryString = ""//SQL语句
getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery sqlQuery = session.createSQLQuery(queryString)
sqlQuery.executeUpdate()
return null
}
})
你设个断点debug调试下,看查询出来的返回值有没有值,如果是null,那说明你的查询语句或者hibernate的配置文件有问题(多半是方言dialect配置有问题)。如果有值,那说明是你的获取方法有问题了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)