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

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值