zoukankan      html  css  js  c++  java
  • Hibernate查询

    HQL查询

    1)按条件查询

    HQL中可以追加查询条件,条件中写的是属性名,之后在执行查询前用query对吸那个为条件参数赋值。如:

    String hql="from service where unioHost=?";
    Session session=HiberateUtil.getSession();
    Query query=session.createQuery(hql);
    query.setString(0,"192.168.0.23");
    List<service> service=query.list();

    2)查询一部分字段

    1)使用HQL查询时可以只查询表中的一部分字段,需要在from之前追加select语句,并且明确指定要查询的列对应的属性名如:

    String hql="select id,unixHost,UserName "+"from service";

    注:

        当查询一部分字段时,query.list()方法返回的集合中封装的不再是实体对象,而是一个Object[],数组中的值与 select语句后面的属性按顺序对应。

    分页查询

    Hibernate的分页查询不是通过HQL条件实现的,而是通过API统一实现,需要通过API设置出分页的起点和每页显示的行数如:

    int from=(page-1)*pageSize;
    query.setFirstResult(from);
    query.setMaxResults(pageSize);

    注意:

    1)查询的起点是本页第一行,按照JDBC计算,公式为(page-1)*pageSize+1

    2)Hibernate中行数的起点从0开始计算的,不同于JDBC中从1开始计算,所以计算公式应该是在JDBC的计算公式基础-1,即(page-1)*pageSize.

    多表联合查询

    1)Hibernate支持使用HQL进行多表联合查询,不过HQL中写的是关联的对象及属性名

    2)Hibernate中有3种使用HQL实现关联查询的方式,分别是

    -----对象方式关联

    -----join方式关联

    -----select字句关联

    3)对象方式关联 如:

    String hql="select sid,s.UserName"+
                     "s.unixHost,a.id,a.realName,a.idcardNo"+
    "from service s, Account a"+ "where s.account.id=a.id";

    4)join方式关联 如:

    String hql="select s.id,s.UserName, "+
                     "s.unixHost,a.id,a.realName,a.idcardNo"+
                     "from Account a inner join a.services s" ;

    注意:join时,不能直接join对象,需要join自身的属性

    5)select子句关联 如:

    String hql="select id, UserName, "
                    "unixHost,account.id,account.realName,"+
                     "account.idcardNo"+
                     "from service";

    直接使用SQL查询

    如果业务太复杂,无法通过HQL实现查询功能,Hibernate也支持直接使用SQL进行查询,参考代码如下:

    String sql="select * from SERVICE where UserName=?";
    Session session=HibernateUtil.getSession();
    SQLQuery query=session.createSQLQuery(sql);
    query.setString(0,"xiaohua");
    List<Object[]> list=query.list();
    //本次查询返回的集合中,封装的是Object[]

    使用criteria查询

    Hibernate还支持使用一个criteria的API来动态拼一个HQL 如:

    Criteria c=session.createCriterial(service.class);
    c.add(Restrictions.eq("unixHost","192.168.0.26")).add(Restrictions.or(Restrictions.eq("UserName","guojing"),Restrictions.eq("UserName","huangr")));
    
    List<service> list=c.list();
  • 相关阅读:
    unsupported jsonb version number 123
    如何在MPlayer上支持RTSP
    TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos
    如何使用IoTSharp对接ModBus?
    如何从源码启动和编译IoTSharp
    Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
    MQTTnet 的Asp.Net Core 认证事件的扩展
    Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
    The remote certificate is invalid according to the validation procedure 远程证书验证无效
    settings插拔式源码
  • 原文地址:https://www.cnblogs.com/peachwang/p/7418403.html
Copyright © 2011-2022 走看看