当前位置:首页>开发>正文

hibernate怎样查询数据库里面的所有数据 Hibernate数据查询

2023-04-18 00:50:36 互联网 未知 开发

 hibernate怎样查询数据库里面的所有数据 Hibernate数据查询

hibernate怎样查询数据库里面的所有数据

Hibernate查询所有数据的操作方式有三种。
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")
Listlist = 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 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 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 list = qQLQuery.list() //使用forEach遍历集合 for (UserEntity userEntity : list) { System.out.println(userEntity) } tx.commit() } catch (Exception e) { tx.rollback() }finally{ sessionFactory.close() } }

Hibernate数据查询

前两种性质是一样的,你看下源码就知道了:
Spring的org.springframework.orm.hibernate3.HibernateTemplate中的方法:
public List find(String queryString) throws DataAccessException {
return find(queryString, (Object[]) null)
}

public List find(final String queryString, final Object... values) throws DataAccessException {
return executeWithNativeSession(new HibernateCallback<List>() {
public List doInHibernate(Session session) throws HibernateException {
Query queryObject = session.createQuery(queryString)
prepareQuery(queryObject)
if (values != null) {
for (int i = 0 i < values.length i ) {
queryObject.setParameter(i, values[i])
}
}
return queryObject.list()
}
})
}

其实org.hibernate.impl.SessionImple里还有一种find(String hql)的。

至于Criteria,其实就是方便面向对象的编码者而设计的,让编码者省去考虑面向关系的逻辑,其实质是一样的。你可以查下源码吧。

使用hibernate的get方法查询数据库,是不是只能根据id字段查询?

最基本的查询就是获得一个标量(数值)的列表。
  1sess.createSQLQuery("SELECT * FROM CATS").list()
  2sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list()
  将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值。Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。
  如果要避免过多的使用ResultSetMetadata,或者只是为了更加明确的指名返回值,可以使用addScalar()。

hibernate怎么用查询

1:hibernate数据查询方式:有HQL方式,QBC方式,原生SQL方式。HQL适合静态查询,QBC则适合较多的动态查询。
A:HQL方式,支持条件查询,连接查询,分页查询,分组查询,内置函数和自定义函数查询(SUN(),MIN(),MAX()),子查询,动态绑定参数查。
HQL语句定义如下:
String hql="from book"
Query query=session.createQuery(hql)
B:QBC方式,也就是QBC检索方式。QBC通过Session类创建Criteria实例,通过不同方法进行检索,实际上Criteria是用来装载查询条件的容器。QBC有很多条件函数,如:Resstictions.eq(),Resstictions.gt(),Resstictions.ge(),
Resstictions.le(),Resstictions.and(),Resstictions.or()等。
Criteria容器使用方法如下:
Criteria criteria=session.createCriteria(book.class)
criteria.add(Restrications.It("id",new Integer(4)))
List list=criteria.list()
C:原生SQL方式。不管是HQL还是QBC最终都要通过Hibernate来解析,把他们转换成SQL语句进行对数据库的操作。因为我们知道SQL可以在多平台之间使用。
使用原生SQL方式如下:
String sql="select {b.*} from book b"
SQLQuery squery=session.createSQLQuery(sql)
squery.addEntity("b",book.class)
List list=squery.list()
2:hibernate的关联查询
A:一对一关联:
B:一对多,多对一关联
C:多对多关联
最后,要学hibernate,平时要多动手,慢慢积累经验,成就感就会也大,这样才能学而不厌。祝你学习进步。

最新文章