Hibernate框架(14) —— Hibernate中的批量查询概述之HQL查询

引言

    HQL:Hibernate query language

    HQL查询:Hibernate独家查询语言。

    使用范围:适合多表查询,但不复杂时使用。

一、普通查询

    public class CustomerDaoImpl implements CustomerDao {

        public void save(Customer c) {

            //1.获得session

            Session session = HibernateUtils.openSession();

            //2.打开事务

            Transaction tx = session.beginTransaction();

            //*****************************************

            //3. 执行操作

            1 书写HQL语句 String hql = “from 对象的完整类名”;

            String hql = “from cn.it.domain.Customer”;

            2 根据HQL语句创建查询对象

            Query query = session.createQuery(hql);

            3 根据查询对象获得查询结果(结果不唯一,用list方法)

            List<Customer> list = query.list(); //返回list结果。

            System.out.println(list);

            //******************************************

            //4.提交事务

            tx.commit();

            //5.关闭资源

            session.close();

        }

    }

二、条件查询

HQL语句中,不可能出现任何数据库相关的信息的。

public class CustomerDaoImpl implements CustomerDao {

    public void save(Customer c) {

        //1.获得session

        Session session = HibernateUtils.openSession();

        //2.打开事务

        Transaction tx = session.beginTransaction();

        //*****************************************

        //3. 执行操作

        1 书写HQL语句 String hql = “from 对象的完整类名”;

        String hql = “from Customer where cust_id = 1”(属性名)

        2 根据HQL语句创建查询对象

        Query query = session.createQuery(hql);

        3 根据查询对象获得查询结果

        Customer c =  (Customer)query.uniqueResult();

        System.out.println(c);

        //******************************************

        //4.提交事务

        tx.commit();

        //5.关闭资源

        session.close();

    }

}

三、问号占位符

public class CustomerDaoImpl implements CustomerDao {

    public void save(Customer c) {

        //1.获得session

        Session session = HibernateUtils.openSession();

        //2.打开事务

        Transaction tx = session.beginTransaction();

        //*****************************************

        //3. 执行操作

        1 书写HQL语句 String hql = “from 对象的完整类名”;

        String hql = “from Customer where cust_id = ?”;

        2 根据HQL语句创建查询对象

        Query query = session.createQuery(hql);

        3 设置参数(HQL中第一位索引为0, SQL中第一位索引为1)

        query.setLong(0, 1L);

        4 根据查询对象获得查询结果

        Customerc = (Customer)query.uniqueResult();

        System.out.println(c);

        //******************************************

        //4.提交事务

        tx.commit();

        //5.关闭资源

        session.close();

    }

}

四、问号占位符(不管占位符数据类型)

public class CustomerDaoImpl implements CustomerDao {

    public void save(Customer c) {

        //1.获得session

        Session session = HibernateUtils.openSession();

        //2.打开事务

        Transaction tx = session.beginTransaction();

        //*****************************************

        //3. 执行操作

        1 书写HQL语句 String hql = “from 对象的完整类名”;

        问号占位符

        String hql = “from Customer where cust_id = ?”;

        2 根据HQL语句创建查询对象

        Query query = session.createQuery(hql);

        3 设置参数

        query.setParameter(0,1L);

        4 根据查询对象获得查询结果

        Customer c = (Customer)query.uniqueResult();

        System.out.println(c);

        //******************************************

        //4.提交事务

        tx.commit();

        //5.关闭资源

        session.close();

    }

}

五、命名占位符(只要命名占位符不重名就可以,名字可以随意取,一般用字段名)

public class CustomerDaoImpl implements CustomerDao {

    public void save(Customer c) {

        //1.获得session

        Session session = HibernateUtils.openSession();

        //2.打开事务

        Transaction tx = session.beginTransaction();

        //*****************************************

        //3. 执行操作

        1 书写HQL语句 String hql = “from 对象的完整类名”;

        String hql = “from Customer where cust_id = :cust_id”;(占位符名可以随意取,一般用字段名)

        2 根据HQL语句创建查询对象

        Query query = session.createQuery(hql);

        3 设置参数(在setParameter()方法中通过变量名来设置参数值)

        query.setParameter(“cust_id”, 1L);//占位符名

        4 根据查询对象获得查询结果(一个结果用uniqueResult方法)

        Customer c =(Customer)query.uniqueResult();

        System.out.println(c);

        //******************************************

        //4.提交事务

        tx.commit();

        //5.关闭资源

        session.close();

    }

}

注意:不能在HQL中既使用“?”又使用“:”,

例如 String hql = “from Customer where cust_id =:cust_id and cust_sex = ?”;

六、分页查询

public class CustomerDaoImpl implements CustomerDao {

    public void save(Customer c) {

        //1.获得session

        Session session = HibernateUtils.openSession();

        //2.打开事务

        Transaction tx = session.beginTransaction();

        //*****************************************

        //3. 执行操作

        1 书写HQL语句 String hql = “from 对象的完整类名”;

        String hql = “from cn.it.domain.Customer”;

        2 根据HQL语句创建查询对象

        Query query = session.createQuery(hql);

        3 设置分页信息

        query.setFirstResult(0);//从哪个开始

        query.setMaxResults(5);//每次几个

        4 根据查询对象获得查询结果

        List<Customer> list = query.list(); 

        System.out.println(list);

        //******************************************

        //4.提交事务

        tx.commit();

        //5.关闭资源

        session.close();

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值