1、Query
(1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hibernate查询语言。
(2)hql语言 *** 作的是实体类和实体类的属性,比如查询所有数据的hql语句为:from 实体类名称。
(3)使用方法:首先创建Query对象,然后调用该对象的List方法返回数据集合。
@Test
public void test11(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createQuery方法创建Query对象。
* 参数为hql语句
* 使用QUERY对象的list方法获取数据集合
*/
Query query =session.createQuery("from UserEntity")
List<UserEntity>list = query.list()
//使用forEach遍历集合
for (UserEntity userEntity : list) {
System.out.println(userEntity)
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
2、criteria
(1)使用该对象不需要写hql语句,只需要指定实体类。
(2)使用方法:首先创建criteria对象,然后调用list返回数据集合。
@Test
public void test12(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createCriteria方法创建criteria对象。
* 使用criteria对象的list方法获取数据集合
*/
Criteria criteria =session.createCriteria(UserEntity.class)
List<UserEntity>list = criteria.list()
//使用forEach遍历集合
for (UserEntity userEntity : list) {
System.out.println(userEntity)
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
3、SQLQuery
(1)使用该对象,需要写底层的SQL语句。
(2)实现方法:首先创建该对象,然后调用list。
@Test
public void test13(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createSQLQuery方法创建SQLQuery对象。
* 使用qQLQuery对象的list方法获取数据集合,集合里面不是对象,而是数组
*/
SQLQuery qQLQuery =session.createSQLQuery("select * from t_user")
List<Object[]>list = qQLQuery.list()
//使用forEach遍历集合
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects))
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
(3)数组转换成对象
@Test
public void test13(){
SessionFactory sessionFactory = null
Session session = null
Transaction tx = null
try {
sessionFactory = HibernateUtils.getFactory()
session = sessionFactory.getCurrentSession()
tx = session.beginTransaction()
/**
* 使用session对象的createSQLQuery方法创建SQLQuery对象。
* 使用qQLQuery对象的list方法获取数据集合,集合里面不是对象,而是数组
*/
SQLQuery qQLQuery =session.createSQLQuery("select * from t_user")
//将数组装载进实体中
qQLQuery.addEntity(UserEntity.class)
List<UserEntity >list = qQLQuery.list()
//使用forEach遍历集合
for (UserEntity userEntity : list) {
System.out.println(userEntity)
}
tx.commit()
} catch (Exception e) {
tx.rollback()
}finally{
sessionFactory.close()
}
}
HQL是Hibernate官方推荐的标准查询方式,HQL查询在涵盖 Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装,基本上我们在项目中使用hql 都会创建一个与数据库表关系映射的一个model,或者是使用xml方式实现映射。SQL是结构化查询语言,是面向数据检索,不具有面向对象的特征。
下面是我理解的 hql 查询,可以参考下:
HQL查询表可以用别名,如:String hql = "from Student s",
HQL查询可以忽略select,表可以使用as命名别名,如:String hql = "from Student as s",
使用select查询实体对象,必须采用别名,如:String hql = "select s from Student as s",
但是不支持select * from .....这样的查询语句
这是我对HQL 的理解,希望可以帮到你。。。。
你可以使用HQL,即hibernate sql 语句。具体语句和以前的jdbc一样。。。
当然,你也可以这样写:
Query query = session.createQuery("from User")
List<User>userList = query.list()
在测试里面迭代userList,就好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)