1. 程式人生 > >Hibernate框架的內連線和迫切內連線

Hibernate框架的內連線和迫切內連線

public class HQLTest {
    @Test
    public void fun1(){
        Session session=null;
        Transaction tx=null;
        try {
            session = HibernateUtils.getSessionObject();//獲取session物件
            tx = session.beginTransaction();
//            String hql="from Employee where eid=?"; //hql的語法,查詢id有兩種方式
            String hql="from Employee where eid=:eid";
            Query query = session.createQuery(hql);//hql的查詢
            query.setParameter("eid", 2);//在hql中佔位符是從0開始計算的
//            query.setParameter(0, 2);//在hql中佔位符是從0開始計算的
            List<Employee> list = query.list();
            System.out.println(list);
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        }finally{
        }
    }
        @Test
        public void fun2(){
            Session session=null;
            Transaction tx=null;
            try {
                session = HibernateUtils.getSessionObject();//獲取session物件
                tx = session.beginTransaction();
                /*
                 * hql分頁
                 */
//                String hql="from Employee";//分頁查詢,首先要查詢出所有,在進行分頁
//                Query query = session.createQuery(hql);
//                query.setFirstResult(0);//設定從那條資料開始
//                query.setMaxResults(4);//設定當前頁面展示資料的條數
//                List<Employee> list = query.list();
//                System.out.println(list);
                
                /*
                 * hql的聚合函式語法 "select 聚合函式(欄位名) from 實體類名稱"
                 */
//                String hql="select count(*) from Employee";//查詢當前記錄數時返回的是Long型別
//                String hql="select sum(eid) from Employee";
//                String hql="select avg(*) from Employee";//平均數返回是double型別
//                String hql="select max(eid) from Employee";//最大值和最小值返回int型別
//                String hql="select min(*) from Employee";
//                Query query = session.createQuery(hql);
//                int num = (int) query.uniqueResult();
//                System.out.println(num);
                
                /*
                 * 投影查詢,查部分欄位
                 */
//                String hql="select eid,ename from Employee";
//                Query query = session.createQuery(hql);
//                List<Object[]> list = query.list();
//                for (Object[] objects : list) {
//                    System.out.println(Arrays.toString(objects));
//                }
                
                /*
                 * 內連線,以陣列方式進行儲存
                 */
//                String hql="from Customer c inner join c.setPerson";
//                Query query = session.createQuery(hql);
//                List<Object[]> list = query.list();
//                for (Object[] objects : list) {
//                    System.out.println(Arrays.toString(objects));
//                }
                
                /*
                 * 迫切內連線是以物件的方式進行儲存的,和內連線的區別就是:
                 * 內連線返回是list集合中每部分陣列
                 * 而迫切內連線返回list每部分是物件
                 *
                 */
//                String hql="from Customer c inner join fetch c.setPerson";
                String hql="from Customer c left outer join fetch c.setPerson";
                Query query = session.createQuery(hql);
                List<Customer> list = query.list();
                for (Customer customer : list) {
                    System.out.println(customer);
                }
                
                /*
                 * 左連線 語法:from Customer c left outer join c.setPerson,
                 * 迫切左連線: from Customer c left outer join fetch c.setPerson
                 * 右連線:from Customer c right outer join c.setPerson,
                 * 迫切右連線:from Customer c right outer join fetch c.setPerson
                 */
                tx.commit();
            } catch (Exception e) {
                e.printStackTrace();
                tx.rollback();
            }finally{
            }
    }

}