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";
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{
}
}
}