1. 程式人生 > >Hibernate核心API之Query查詢(hql)

Hibernate核心API之Query查詢(hql)

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連線下載