hibernate查询数据库
㈠ hibernate没有实体类的情况下,怎么查询数据库中的数据
以在接口HibernateDaoSupport 中的类中获取session查询数据库中的数据。
㈡ 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查询一张表的所有的数据
这是懒加载的问题,所谓懒加载就是对于关联的表数据并不会立即从数据库中加载出来,而是当你使用它的时候才会从数据库加载,懒加载避免了从数据库中加载过多的无用数据(如果不需要关联数据),在hibernate的映射文件中,默认都是懒加载。
在hibernate映射文件中(如b.hbm.xml)每一个class元素,
,
(或其他表示多的元素)都会有一个lazy的属性,如
如果你确实需要在整个项目中都需要立即加载,那么可以设置为立即加载,即lazy=false
但是并不建议立即加载,那还有什么办法呢
1,使用它的非getid的方法,如form
b获取了b的list,那么遍历一遍list
for(b
b
:
list){
b.geta.getaname();
b.getc.getbname();
}
2,使用hibernate内置的静态方法initialize()
for(b
b
:
list){
hibernate.initialize(b.geta);
hibernate.initialize(b.getc);
}
㈣ 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");
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();
}
}
㈤ hibernate跨数据库查询
可以使用hibernate支持的Hql语言实现跨平台操作数据库的要求!
㈥ 如何用hibernate查询不同数据库的表名
可以实现.
首先有一点要弄清楚!
一个hiernate一般只对应一个WEB应用和一个数据库
像你说的一个查询语句就办到,可能比较难
但是一个方法可能可以办到!
SessionFactory 的实例对应一个数据库
一个Hibernate.cfg.xml 配置文件对应一个数据库
你可以配置多个配置文件
获得SessionFactory实例的时候传入不同的配置文件即可
㈦ Hibernate查询数据库问题(用户登录的实现)。
Criterion cri1=Expression.like("name", username);
应改成
Criterion cri1=Expression.eq("name", username);
另外建议判断list.size()>0
即可证明用户名密码正确
㈧ hibernate中,用HQL查询如何获取数据库中年龄字段最大的那条记录HQL语句怎么写
可以用子查询:
hql语句
"from User where age=(select max(age) from User) "
相应的sql语句是
SELECT * FROM USER WHERE AGE=(SELECT MAX(AGE) FROM USER);
㈨ hibernate中如何查询oracle中最近的一条数据库记录
return query.setResultTransformer(Transformers.aliasToBean(aaaaaa.class)).list()
㈩ 使用hibernate查询数据库,如果确定只有一条数据,应当怎样查询
1、不管结果多少,都是作为一个list返回
接收list的时候,你肯定也使用循环吧?无所谓
2、只要一行结果的话,mysql你已经知道了
sqlserver: SELECT TOP 1 ... ...
Oracle: SELECT .... FROM table WHERE rownum<2