Hibernate框架的內連線和迫切內連線
阿新 • • 發佈:2019-02-10
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{
}
}
@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{
}
}
}