hibernate 中的批量查询

本文详细介绍了Hibernate中的批量查询方法,包括HQL查询的多表操作、条件、分页、排序和统计,Criteria查询的单表操作及原生SQL查询用于处理复杂业务。通过这些查询方式,开发者可以更高效地进行数据检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四:批量查询

1、HQL查询(多表查询,但不复杂时使用)

面向对象的查询语言

基本查询
        String sql = "from Customer";
        Query query = session.createQuery(sql);
        List<Customer> list = query.list();
        //Object uniqueResult = query.uniqueResult();//获得单个的对象
条件查询(1)
        String sql="from Customer where cust_id = :cust_id"; //:cust_id为下边这是的那个cust_id
        Query query = session.createQuery(sql);
        query.setParameter("cust_id", 1l);
        Object uniqueResult2 = query1.uniqueResult();  //返回查询结果
条件查询(2)
    String hql="from Customer where cust_id=?";
    Query qr = session.createQuery(hql);
    qr.setParameter(0, 1l);
    Customer customer = (Customer) qr.uniqueResult();
分页查询
        String sql = "from Customer";
        Query query = session.createQuery(sql);
        query.setFirstResult(0);  //与limit里的?,?一样,从第几个开始  (索引从0开始计数)
        query.setMaxResults(2);   //显示几个
        List<Customer> list = query.list();
排序查询
    String hql="from Customer order by cust_id desc";
    Query qr = session.createQuery(hql);
    List<Customer> list = qr.list();

和sql语句一样

统计查询
    String hql="select count(*) from Customer ";
    String hq2="select sum(*) from Customer ";
    String hq3="select avg(*) from Customer ";
    String hq4="select max(*) from Customer ";
    String hq5="select min(*) from Customer ";
    Query qr = session.createQuery(hql);
    Number uniqueResult = (Number) qr.uniqueResult();
投影查询
    String hql="select cust_name,cust_id from Customer ";
    Query qr = session.createQuery(hql);
    List<Object[]> list = qr.list(); //list集合中是object数组 一行一个
多表查询
    String hql="from Customer c inner join  c.linkmans";
    String hq2="from Customer c inner join fetch c.linkmans"; //迫切
    String hq3="from Customer c left join fetch c.linkmans"; //左外连接
    Query qr = session.createQuery(hql);
    List<Object[]> list = qr.list(); //不迫切的话是返回这个
    List<Customer> list1 = qr.list(); //迫切的话是返回这个
2、criteria查询(单表查询)

Hibernate自创的无语句面向对象查询

基本查询
        Criteria criteria = session.createCriteria(Customer.class);
        List<Customer> list = criteria.list();

直接就出来了…..

条件查询
        Criteria criteria = session.createCriteria(Customer.class);
        criteria.add(Restrictions.eq("cust_id", 1l));
        Object uniqueResult = criteria.uniqueResult();

其中的Restrictions中是添加查询条件的















>gt
>=ge
<lt
<=le
=eq
!=ne
inin
between andbetween
likelike
is not nullisNotNull
>is nullisNull
oror
andand

分页查询
        Criteria criteria = session.createCriteria(Customer.class);
        criteria.setFirstResult(0);  //从0开始
        criteria.setMaxResults(2);

查询总记录数

        Criteria createCriteria = session.createCriteria(Customer.class);
        createCriteria.setProjection(Projections.rowCount());//聚合函数
        Long uniqueResult = (Long)createCriteria.uniqueResult();
排序查询
    Criteria criteria = session.createCriteria(Customer.class);
     criteria.addOrder(Order.asc("cust_id"));
     List list = criteria.list();
2、1离线查询
DetachedCriteria dc = DetachedCriteria.forClass(LinkMan.class);
dc.add(Restrictions.like("lkm_name", "%"+lkm_name+"%"));
        Criteria executableCriteria = dc.getExecutableCriteria(session);
        List<LinkMan> list = executableCriteria.list();
3、原生sql查询(复杂的业务查询)
基本查询
        String sql = "select * from cst_customer";
        SQLQuery createSQLQuery = session.createSQLQuery(sql);
         createSQLQuery.addEntity(Customer.class);
         List<Customer> list = createSQLQuery.list();
条件查询
        String sql = "select * from cst_customer where cst_customer = ?";
        SQLQuery createSQLQuery = session.createSQLQuery(sql);
        createSQLQuery.setParameter(0, 1l);  //设置那个问号的值
        createSQLQuery.addEntity(Customer.class);
        List<Customer> list = createSQLQuery.list();
分页查询
        String sql = "select * from cst_customer limit ?,?";
        SQLQuery createSQLQuery = session.createSQLQuery(sql);
        createSQLQuery.setParameter(0, 0);
        createSQLQuery.setParameter(1, 1);
        createSQLQuery.addEntity(Customer.class);

        List<Customer> list = createSQLQuery.list();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值