Hibernate原生SQL查詢
阿新 • • 發佈:2019-01-23
Hibernate除了支援HQL查詢外,還支援原生SQL查詢。
對原生SQL查詢執行的控制是通過SQLQuery介面進行的,通過執行Session.createSQLQuery()獲取這個介面。該介面是Query介面的子介面。
將createQuery改成createSQLQuery方法
Dao層方法:
@SuppressWarnings("unchecked") @Transactional (propagation = Propagation.REQUIRED,readOnly=true)
public List findAllBySql(String sql){
Session session= getSession();
List list=session.createSQLQuery(sql).
addScalar("id",StandardBasicTypes.INTEGER).
addScalar("uuid",StandardBasicTypes.STRING).
list();
return list;
}
測試類:
@Test
public void testHibernateSql() {
AppBaseService service = (AppBaseService) cxt
.getBean ("appBaseService");
String sql = "select id,uuid from app_basic";
List list = service.findAllBySql(sql);
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
// 每個集合元素都是一個數組,陣列元素是id,uuid兩列值
Object[] objects = (Object[]) iterator.next();
System.out .println("id=" + objects[0]);
System.out.println("uuid=" + objects[1]);
System.out.println("----------------------------");
}
}
這樣會報錯,配置檔案裡面配置的預設的資料庫是device_data,而app_basic這個表是app_data資料庫裡面的。
報錯提示如下:找不到該表
經過測試,只需要在sql語句中指定對應的資料庫即可
即將sql語句修改成: select id ,uuid from app_data.app_basic;