zoukankan      html  css  js  c++  java
  • 浅谈Hibernate--Hibernate查询(Query Language) (转)

    1.查询对象:Query有org.hibernate.query和javax.persistence.query,用法如下
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    如果按条件查找

    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    2.占位符:比如下面的例子:min 和:max,和query.setParameter(key,value);
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    链式的也可以,同时这里setParameter("","")是会自动设置参数的值,如果知道传入的类型可以setInteger..

    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    3.分页效果
    通过query.setMaxResult(n).setFirstResult(m)取出m~n之间的记录

    setFirstResult(m):选择从第几行开始取,默认是row0
    setMaxResult(n):决定取出多少条记录,默认是往后所有rows
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    和下面普通的ql语句实现一样
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    4.获取子属性
    Query query=session.createQuery("from Score s where s.xxx.id=..")
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    同时也可以把临时对象取出来放到Object或者自己建立的辅助类里去
    1.Query query=session.createQuery("select s.name,c.name from Student s,Course c where s.id=.. and c.id=..")
    2.Query query=session.createQuery("select new VObj(s.name,c.name) from Student s,Course c where s.id=.. and c.id=..")

    取出部分属性封装成一个新的对象是不可取的,最好完整的取出整个属性以保证他逻辑的关联性
    如果要取出就这样取
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)


    5.单个对象匹配
    如果你知道取出的是唯一的一个对象,那么就不用query.list(),要用query.uniqueResult();效率比较高

    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    count(*)返回的是一个long类型
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    in
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    Group by
    select avg(s.age) from Student group by s.col;

    having
    select count(*)  from Student s where group by s.col having count(*)>3;
    空值Empty:下面是学生类(Student)中有Set<Course> courses属性(学生所选课程) 选出哪些选课为空的学生
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    Like: %多个 ; _ 一个
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    distinct

    浅谈Hibernate--Hibernate查询(Query <wbr>Language)



    6.可以把QL语句放在一起,以便维护修改用@NamedQueries和@NamedQuery,调用的时候用session.getNamedQuery(QueryName)
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    7.使用数据库自身语言
    如果用hql解决不了问题,那就用sql语言来解决,通过createSQLQuery()来搜索表,并用addEntity(xx.Class)转换成对象
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    当然这也可以用命名的Query

    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

    8.批量删除:通过query.executeQuery();return一个int类型,返回update和delete成功的行数
    浅谈Hibernate--Hibernate查询(Query <wbr>Language)

  • 相关阅读:
    【博客大赛】使用LM2677制作的3V至24V数控可调恒压源
    电压跟随器
    运算放大器虚短和虚断
    JTAG TAP Controller
    JTAG Pinouts
    USB Mass Storage Class – Bulk Only Transport
    Send custom commands to Mass Storage device
    USB Mass Storage communication with PassThrough / more than 64K data length
    STLink download/debug interface for Linux.
    SCSI Pass-Through Interface Tool
  • 原文地址:https://www.cnblogs.com/cornucopia/p/4540120.html
Copyright © 2011-2022 走看看