Hibernate核心API之Query查詢(hql)
阿新 • • 發佈:2019-01-02
Query的使用教程
在SpringStrurs2Hibernate之Hibernate教程程式碼的基礎上來使用Query查詢;
如上圖,我們每個test都建立了構造Configuration,構造SessionFactory,我們現在把它全部打包放在一個Util類裡,用的時候直接呼叫該類就行了,如圖:
public class HibernateUtil { private static SessionFactory sessionFactory; static { /*構建Configuration例項*/ Configuration configure = new Configuration().configure("hibernate.cfg.xml"); //會話工廠 sessionFactory = configure.buildSessionFactory(); } //獲取會話 public static Session openSession(){ return sessionFactory.getCurrentSession(); } }
使用Query簡單查詢:
public class TestEmp { public static void main(String[] args) { //呼叫 selectEmp(); } /** * 查詢Emp表所有 */ public static void selectEmp(){ //獲取會話,呼叫HibernateUtil類 Session session = HibernateUtil.openSession(); /*由Session例項建立Transaction的一個例項,開啟事務*/ Transaction transaction = session.beginTransaction(); //編寫hql語句 String hql = "from Emp"; //建立query物件 Query query = session.createQuery(hql); //呼叫query物件裡面的方法得到結果 List<Emp> list = query.list(); //迴圈輸出 for(Emp e: list){ System.out.println(e); } } }
使用Query模糊查詢
/** * 模糊查詢 * @param ename */ public static void SelectName(String ename){ //獲取會話,呼叫HibernateUtil類 Session session = HibernateUtil.openSession(); /*由Session例項建立Transaction的一個例項,開啟事務*/ Transaction transaction = session.beginTransaction(); //編寫hql語句 String hql = "from Emp where ename like ?"; //建立query物件 Query query = session.createQuery(hql); //新增條件 query.setString(0,"%"+ename+"%"); //呼叫query物件裡面的方法得到結果 List<Emp> list = query.list(); //迴圈輸出 for(Emp e: list){ System.out.println(e); } }
使用Query分頁查詢
步驟1.建立Pager類
public class Pager<T> {
private Integer pageNo; //第幾頁
private Integer pageSize; //每頁行數
private Integer totalRows; //總行數
private Integer totalPage; //總頁數
private List<T> datas;
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalRows() {
return totalRows;
}
public void setTotalRows(Integer totalRows) {
this.totalRows = totalRows;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List<T> getDatas() {
return datas;
}
public void setDatas(List<T> datas) {
this.datas = datas;
}
}
步驟2.
public static void main(String[] args) {
//查詢第一行到第三行資料
Pager<Emp> pager = empPagerSelect(1, 3, null);
System.out.println("第"+pager.getPageNo()+"頁 每頁行數:" + pager.getPageSize()+
" 總行數:"+pager.getTotalRows() +" 總頁數:"+ pager.getTotalPage());
//迴圈列印輸出
for (Emp emp: pager.getDatas() ) {
System.out.println(emp);
}
}
/**
* 使用Query分頁查詢
* @param pageNo 當前頁
* @param pageSize 每頁行數
* @param emp 表
* @return
*/
public static Pager<Emp> empPagerSelect(int pageNo, int pageSize, Emp emp){
//獲取會話,呼叫HibernateUtil類
Session session = HibernateUtil.openSession();
/*由Session例項建立Transaction的一個例項,開啟事務*/
Transaction transaction = session.beginTransaction();
Pager<Emp> pager = new Pager<Emp>();
pager.setPageNo(pageNo); //設定當前頁
pager.setPageSize(pageSize); //設定每頁行數
//設定總行數
Long o =(Long) session.createQuery("select count(*) from Emp").uniqueResult();
pager.setTotalRows(o.intValue()); //設定總行數
// (總行數+每頁行數-1)/每頁行數
pager.setTotalPage( (pager.getTotalRows()+pageSize-1)/ pageSize ); //設定總頁數
//建立query物件
Query query = session.createQuery("from Emp");
//設定起始行數 和 每頁行數
List<Emp> list = query.setFirstResult( (pageNo-1)*pageSize ).setMaxResults(pageSize).list();
pager.setDatas(list);
transaction.commit();
return pager;
}
最後想要程式碼的的同志去這裡下載:Query使用程式碼的demo連線下載