• Criteria查询数据


    Criteria介绍:

    Criteria查询是Hibernate提供的一种查询方式,与HQL基于字符串的查询形式完全不同。Hibernate提供了org.hiberanee.Criteria 接口、orghibernate.criterionCriterion 接口和org.hibernate.criterion.Restrictions类等CriteriaAPI,用于支持在运行时动态生成查询语句。

    简单使用Criteria:

    先面是有一个简单的例子来介绍一下Criteria:

    Session session = HibernateUtil.currentSession();
            Criteria criteria = session.createCriteria(House.class);
                List<House> list = criteria.list();
                for (House house : list) {
                    System.out.println(house.getTitle());
                }

    执行上述代码结果如下:

    image

    其中Session.createCriteria(House.class)方法返回一个Criteria查询接口,House是定义好的持久化类,在调用Criteria查询接口(Criteria)的list方法时Hibernate会动态生成查询所有房屋的sql语句去和数据库进行交互从而生成House对象集合返回给应用程序!

    带条件的Criteria:

    如果不想查询所有的房屋而只是查询标题是“中关村大街一室一厅”的房屋则可以运行如下代码:

    Session session = HibernateUtil.currentSession();
                Criteria criteria = session.createCriteria(House.class);
                criteria.add(Restrictions.eq("title", "中关村大街一室一厅"));
                List<House> list = criteria.list();
                for (House house : list) {
                    System.out.println(house.getTitle());
                }

    其结果如下:

    image

    其中Criteria接口的add方法是向查询语句中设定查询条件其方法参数为Criterion接口,而Restrictions类的静态方法er则返回该接口实例其接受两个参数(属性名称,属性值)。代表查询所有房屋标题等于“中关村大街一室一厅”的房屋信息。当然Restrictions类还有许多其他的方法如(gt:大于、lt:小于,like等这里不再进行一一举例)!

    使用Criteria进行两表关联查询:

    比如房屋信息表和街道信息表存在多对一的关联关系(在House类中保存着Stree(街道)类的引用属性street)

    这是如果想查询”中关村大街“下的所有房屋信息则可以使用一下语句

    Session session = HibernateUtil.currentSession();
            Criteria criteria = session.createCriteria(House.class);
                criteria.createAlias("street", "stt");
                criteria.add(Restrictions.eq("stt.name", "中关村大街"));
                List<House> list = criteria.list();
                for (House house : list) {
                    System.out.println(house.getTitle());
                }

    其结果如下:

    image

    其中Criteria接口的createAlias方法设置House类的street属性的别名为stt,注意:这里必须给street属性设置别名不然Hibernate将抛出异常无法执行查询!

    image

    使用Projection投影查询列;

    如果你想查询房屋信息表中总共有几条记录时就需要使用Projection了代码如下:

    Session session = HibernateUtil.currentSession();
            Criteria criteria = session.createCriteria(House.class);
                criteria.setProjection(Projections.rowCount());
                Object objcou = criteria.uniqueResult();
                Integer count=((Long)objcou).intValue();
                System.out.println(count);

    执行结果:

    image

    使用Criteria进行排序查询:

    Criteria使用addOrder方法来指定排序查询如按照id列进行降序排序代码如下:

    Session session = HibernateUtil.currentSession();
            Criteria criteria = session.createCriteria(House.class);
            criteria.addOrder(Order.desc("id"));
            List<House> list = criteria.list();
            for (House house : list) {
                System.out.println(house.getTitle());
            }

    其结果如下:

    image

    DetachedCriteria:

    DetachedCriteria不需要使用Session对象来创建,

    demo:

    Session session = HibernateUtil.currentSession();
            DetachedCriteria detachedCriteria=DetachedCriteria.forClass(House.class);
            detachedCriteria.createAlias("street", "stt");
            detachedCriteria.add(Restrictions.eq("stt.name", "中关村大街"));
            List<House> list = detachedCriteria.getExecutableCriteria(session).list();
            for (House item : list) {
                System.out.println(item.getTitle());
            }

    结果:

    image

  • 相关阅读:
    利用Socket.Send发送信息、Socket.SendFile传输文件
    C# Winform局域网传送文件
    Microsoft SQL Server 自定义函数整理大全
    Jquery根据关键字快速定位GridView指定行,用于数据快速检索
    MS SqlServer海量数据分页存储过程收集
    利用tessnet2_32.dll实现OCR验证码识别
    asp.net(C#)常用正则表达式封装
    C# 局域网聊天 发送信息
    Linux/Unix shell 自动发送AWR report
    Oracle数据字典与动态性能视图
  • 原文地址:https://www.cnblogs.com/wangzheand/p/5796404.html
Copyright © 2020-2023  润新知