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