• Query查询


    Query(查询):接口运行在数据库上执行查询并控制查询如何执行,查询语句使用HQL或者本地数据库的sql方法编写。

    调用代码:Query query=session.createQuery("from User");

    其中User表示的是类。

    setFirstResult 是起始数据,setMaxResults是查询显示的数据。

    如果放在分页程序里边 setFirstResult的值应该是 (当前页面-1)X每页条数,setMaxResults 就是每页的条数了。

    一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两者的效率如何?
    答:1.scroll是用JDBC2.0的可滚动结果集实现;query.setMaxResults();query.setFirstResult()是数据库SQL语句实现。

    2.你说是在数据库就分页好呢?还是把结果集都取到内存再分页好呢?(应该是在数据库就分了好些吧,但是如果在内存分页的话,换页的时候是不是更快一些呢?)

    3.在数据库进行分页是首选的方式。数据库分页实际上是利用数据库本身SQL扩展的功能进行分页,例如MySQL的 limit 0,50这样的SQL语句。不但速度快,而且非常节省内存。不过不是每种数据库的都有这种分页支持的SQL,例如SQL Server就不支持。

    4.scroll是利用JDBC2.0的功能做分页的,那么就完全取决于特定数据库的JDBC Driver的实现了。事实上大部分JDBC Driver都是把所有的结果集都一次取到内存,然后再分页的。如果这个结果集非常大,例如几万条,不但程序执行速度会很慢,而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现,那么就不会导致这种问题,例如jTDS。

    二、Hibernate可以使用Query.setMaxResults方法简单地设置需要查询的最大结果集。
    然后Hibernate会自 动根据所设置的数据库方言翻译成相应的SQL语句提交给数据库。比如如果数据库是Oracle,SQL Server等,则翻译为类似select ... top 10之类的SQL语句,若是MySQL,则翻译为select ... limit 10之类的SQL。


    三、举例:
    query.setFirstResult(0),query.setMaxResults(4);相当于MySQL中的limit 0, 4;
    public void testQuery() {
       Session session = null;
       try {
         session = HibernateUtils.getSession();
         session.beginTransaction();
         Query query = session.createQuery("from User");
         query.setFirstResult(0);//从第一条记录开始
         query.setMaxResults(4);//取出四条记录
         List userList = query.list();
         for (Iterator iter=userList.iterator(); iter.hasNext();) {
           User user = (User)iter.next();
           System.out.println(user.getId());
           System.out.println(user.getName());
         }
         session.getTransaction().commit();
       }catch(Exception e) {
         e.printStackTrace();
         session.getTransaction().rollback();
       }finally {
         HibernateUtils.closeSession(session);
       }
    } 

    setFirstResult 是起始数据,setMaxResults是查询显示的数据。

    如果放在分页程序里边 setFirstResult的值应该是 (当前页面-1)X每页条数,setMaxResults 就是每页的条数了。

    一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两者的效率如何?
    答:1.scroll是用JDBC2.0的可滚动结果集实现;query.setMaxResults();query.setFirstResult()是数据库SQL语句实现。

    2.你说是在数据库就分页好呢?还是把结果集都取到内存再分页好呢?(应该是在数据库就分了好些吧,但是如果在内存分页的话,换页的时候是不是更快一些呢?)

    3.在数据库进行分页是首选的方式。数据库分页实际上是利用数据库本身SQL扩展的功能进行分页,例如MySQL的 limit 0,50这样的SQL语句。不但速度快,而且非常节省内存。不过不是每种数据库的都有这种分页支持的SQL,例如SQL Server就不支持。

    4.scroll是利用JDBC2.0的功能做分页的,那么就完全取决于特定数据库的JDBC Driver的实现了。事实上大部分JDBC Driver都是把所有的结果集都一次取到内存,然后再分页的。如果这个结果集非常大,例如几万条,不但程序执行速度会很慢,而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现,那么就不会导致这种问题,例如jTDS。

    二、Hibernate可以使用Query.setMaxResults方法简单地设置需要查询的最大结果集。
    然后Hibernate会自 动根据所设置的数据库方言翻译成相应的SQL语句提交给数据库。比如如果数据库是Oracle,SQL Server等,则翻译为类似select ... top 10之类的SQL语句,若是MySQL,则翻译为select ... limit 10之类的SQL。


    三、举例:
    query.setFirstResult(0),query.setMaxResults(4);相当于MySQL中的limit 0, 4;
    public void testQuery() {
       Session session = null;
       try {
         session = HibernateUtils.getSession();
         session.beginTransaction();
         Query query = session.createQuery("from User");
         query.setFirstResult(0);//从第一条记录开始
         query.setMaxResults(4);//取出四条记录
         List userList = query.list();
         for (Iterator iter=userList.iterator(); iter.hasNext();) {
           User user = (User)iter.next();
           System.out.println(user.getId());
           System.out.println(user.getName());
         }
         session.getTransaction().commit();
       }catch(Exception e) {
         e.printStackTrace();
         session.getTransaction().rollback();
       }finally {
         HibernateUtils.closeSession(session);
       }
    }
  • 相关阅读:
    进程间的通讯(IPC)方式
    进程间通信IPC之--共享内存
    TMDS协议
    HDMI接口与协议
    HDMI的CEC是如何控制外围互联设备的
    SVN并行开发管理策略
    关于 javascript event flow 的一个bug
    H面试程序(15): 冒泡排序法
    android应用如何启动另外一个apk应用
    [置顶] 一份诚恳的互联网找工作总结和感想(附:怎样花两年时间去面试一个人)
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1957590.html
Copyright © 2020-2023  润新知