Hibernate 学习笔记 之 查询方式

一、对象导航查询

根据id查询某个客户,再查询这个客户里面所有的联系人
//演示对象导航查询
    @Test
    public void testSelect1() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            /**
             * 根据cid = 1客户,再查询这个客户里面所有联系人
             */
            Customer customer = session.get(Customer.class, 1);

            Set<LinkMan> linkMans = customer.getSetLinkMan();

            System.out.println(linkMans.size());

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

二、OID查询

根据id查询某一条记录,返回对象
  即调用session里面的get方法实现
  Customer customer = session.get(Customer.class, 1);

三、hql查询

用Query对象,写hql语句来实现查询
hql:(hibernate query language,提供一种查询语言,hql语言和普通sql相似。区别在于:普通sql操作数据库表和字段,hql操作实体类和属性)
常用hql语句
使用hql查询操作时候,使用Query对象
  (1)创建Query对象,写hql语句
  (2)调用Query对象里面的方法得到结果
Hibernate5.x Query 对象(不提示过时)

这里写图片描述

以下还是使用老版本
/**
     * 查询所有
     */
    public void testSelect2() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1.创建query对象
            Query query = session.createQuery("from Customer");

            //2.调用方法得到结果
            List<Customer> list = query.list();

            for (Customer customer : list){
                System.out.println(customer.getCid() + "::" + customer.getCustName());
            }

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 条件查询
     * from xxx where xx=? and x=?
     * from yyy where yy like?
     */
    @Test
    public void testSelect3() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            //select * from t_customer where cid=? and custName=?
            Query query =
                    session.createQuery("from Customer where cid=? and custName=?");
            /**
             * 2.设置条件值 即 向?中设置
             * 第一个参数:int类型 ---> 标号 从 0开始
             * 第二个参数:具体参数值
             */
            query.setParameter(0, 1);
            query.setParameter(1, "啦啦");

            //3.调用方法得到结果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 模糊查询 like
     */
    @Test
    public void testSelect4() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            //select * from t_customer where cid=? and custName=?
            Query query =
                    session.createQuery("from Customer where custName like ?");

            //2 设置?的值
            //啦%
            query.setParameter(0, "啦%");

            //3.调用方法得到结果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 排序查询
     */
    @Test
    public void testSelect5() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Query query =
                    session.createQuery("from Customer order by id");

            //3.调用方法得到结果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 分页查询
     * mysql里 使用关键字 limit
     * select * from t_customer limit 0, 3;
     *
     * 在hql操作中,在语句里面不能写limit query有两个方法可用
     */

    @Test
    public void testSelect6() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Query query = session.createQuery("from Customer");

            //2.设置分页数据
            //2.1设置开始位置
            query.setFirstResult(0);
            //2.2设置每页记录数
            query.setMaxResults(3);

            //3.调用方法得到结果
            List<Customer> list = query.list();
            for (Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 投影查询
     *
     * 可以查询部分字段
     *
     * select 实体类属性名称1,实体类属性名称2 from 实体类名称
     * select 后面不能写 * , 不支持的
     */
    @Test
    public void testSelect7() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Query query = session.createQuery("select custName from Customer");

            //2.调用方法得到结果
            List<Customer> list = query.list();
            for (Object object : list){
                System.out.println(object);
            }


            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 聚集函数使用
     *
     * 常用聚集函数:
     *      count sum avg max min
     */
    @Test
    public void testSelect8() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Query query = session.createQuery("select count(*) from Customer");

            //调用方法得到结果
            //query对象里面有方法,直接返回对象形式
            Object object = query.uniqueResult();

            Long lobj = (Long) object;
            int count = lobj.intValue();
            System.out.println(count);



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

四、QBC查询

Criteria对象
 /**
     * 使用QBC时候,
     * 不需要写语句,使用方法实现
     *
     * 操作实体类和属性
     */
/**
     * 查询所有
     */
    @Test
    public void testSelect9() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Criteria criteria = session.createCriteria(Customer.class);

            //调用方法得到结果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
 /**
     * 条件查询
     *
     */
    @Test
    public void testSelect10() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 使用Criteria对象里面的方法设置条件值
            //首先使用add方法,表示设置条件
            //在add方法里面使用类的方法实现条件设置
            criteria.add(Restrictions.eq("custName", "啦啦"));

            //3. 调用方法得到结果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
Restrictions的方法表

这里写图片描述

/**
     * 模糊查询
     *
     */
    @Test
    public void testSelect11() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 使用Criteria对象里面的方法设置条件值
            //首先使用add方法,表示设置条件
            //在add方法里面使用类的方法实现条件设置
            criteria.add(Restrictions.like("custName", "%啦"));

            //3. 调用方法得到结果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 排序查询
     *
     */
    @Test
    public void testSelect12() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 设置排序规则和对哪个属性进行排序
            criteria.addOrder(Order.asc("cid"));

            //3. 调用方法得到结果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
 /**
     * 分页查询
     *
     */
    @Test
    public void testSelect13() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 设置分页数据
            //2.1 设置开始位置
            criteria.setFirstResult(0);

            //2.2每页显示记录数
            criteria.setMaxResults(3);

            //3. 调用方法得到结果
            List<Customer> list = criteria.list();

            for(Customer customer : list){
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
/**
     * 统计查询
     *
     */
    @Test
    public void testSelect15() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();

            //1. 创建query对象
            Criteria criteria = session.createCriteria(Customer.class);

            //2. 设置操作
            criteria.setProjection(Projections.rowCount());

            //3. 调用方法得到结果
            Object object =  criteria.uniqueResult();
            Long lobj = (Long) object;
            int count = lobj.intValue();
            System.out.println(count);

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

五、本地sql查询

SQLQuery对象,使用普通sql实现查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值