hibernate查询语句-买球官网平台

`
lenjey
  • 浏览: 84549 次
  • 性别:
  • 来自: 北京
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 44)
    • ( 0)
    存档分类

    hibernate查询语句--hql

    1 .from

    1.1单表查询

    from eg.cat as cat.其中,cat只是一个别名,为了用其他子语句的时候书写简单

    1.2多表查询

    from eg.cat,eg.dog
    from eg.cat as cat,eg.dog as dog
    2 join相关
    (inner) join
    left (outer) join
    right (outer) join
    full join
    hql同样对sql中的这些特性支持
    下面插播一个小话题,关于上边的那些特性,我一直都没怎么用,今天既然说到这里,就想
    把上边的几个特性的用法说一下,也算对自己的一个补充:
    假设有两个表:部门、员工,下面列举一些数据:
    员工(employee):
    id name depno
    001 jplateau 01
    002 jony 01
    003 camel 02
    部门(department):
    id name
    01 研发部
    02 营销部

    在hibernate中我们操纵的都是对象,所以我们操纵的是部门类和员工类
    1).(inner) join
    select employee.id as id1,employee.name as name1,department.id as id2,department.name
    as name2 from employee as employee join department as department on employee.depno=
    department.id (注意到条件语句我用on 没有用where)
    那么执行结果是什么呢?
    id1 name1 id2 name2

    001 jplateau 01 研发部
    002 jony 01 研发部

    2).left (outer) join
    select employee.id as id1,employee.name as name1,department.id as id2,department.name
    as name2 from employee as employee left join department as department on employee.depno=
    department.id
    那么执行结果又该是什么呢?
    id1 name1 id2 name2

    001 jplateau 01 研发部
    002 jony 01 研发部
    003 camel null null
    {就是说此时我要已第一个表的记录多少为准,第二个表中没有相应纪录的时候填充null}
    3). right (outer) join
    select employee.id as id1,employee.name as name1,department.id as id2,department.name
    as name2 from employee as employee right join department as department on employee.depno=
    department.id
    那么执行结果又该是什么呢?
    id1 name1 id2 name2

    001 jplateau 01 研发部
    002 jony 01 研发部
    null null 02 营销部
    {就是说此时我要已第二个表的记录多少为准,第一个表中没有相应纪录的时候填充null}

    3 大小写敏感

    4。select语句
    就是要确定你要从查询中返回哪些对象或者哪些对象的属性。写几个例子吧:
    select employee form employee as employee
    select employee form employee as employee where employee.name like 'j%'
    select employee.name form employee as employee where employee.name like 'j%'
    select employee.id as id1,employee.name as name1,department.id as id2,department.name
    as name2 from employee as employee right join department as department on employee.depno=
    department.id

    select elements(employee.name) from employee as employee
    (不明白elements到底是做什么用的?望给于说明)
    等等
    5。数学函数
    jdo目前好像还不支持此类特性。
    avg(...), sum(...), min(...), max(...)

    count(*)

    count(...), count(distinct ...), count(all...)

    其用法和sql基本相同

    select distinct employee.name from employee as employee
    select count(distinct employee.name),count(employee) from employee as employee

    6。polymorphism (暂时不知道如何解释?)
    from com.test.animal as animal
    不光得到所有animal得实例,而且可以得到所有animal的子类(如果我们定义了一个子类cat)
    一个比较极端的例子
    from java.lang.object as o
    可以得到所有持久类的实例

    7。where语句
    定义查询语句的条件,举几个例子吧:
    from employee as employee where employee.name='jplateau'
    from employee as employee where employee.name like 'j%'
    from employee as employee where employee.name like '%u'
    在where语句中“=”不光可以比较对象的属性,也可以比较对象,如:
    select animal from com.test.animal as animal where animal.name=dog

    8。表达式

    在sql语句中大部分的表达式在hql中都可以使用:
    mathematical operators , -, *, /

    binary comparison operators =, >=, <=, <>, !=, like

    logical operations and, or, not

    string concatenation ||

    sql scalar functions like upper() and lower()

    parentheses ( ) indicate grouping

    in, between, is null

    jdbc in parameters ?

    named parameters :name, :start_date, :x1 (这种应该是另一种"?"的变通解决方法)

    sql literals 'foo', 69, '1970-01-01 10:00:01.0'

    java public static final constants eg.color.tabby

    其他不必解释了,在这里我只想对查询中的参数问题说明一下:
    大家知道在sql中进行传递参数进行查询的时候,我们通常用preparedstatement,在语句中写一大堆的“?”,
    在hql中也可以用这种方法,如:
    list mates = sess.find(
    "select employee.name from employee as employee "
    "where employee.name=? ",
    name,
    hibernate.string
    );
    (说明:上面利用session里的find方法,在hibernate的api session中重载了很多find方法,它可以满足你多种形式的查询)
    上边是一个参数的情形,这种情况下紧接着引入参数和定义参数的类型,当为多个参数,调用另一个find方法,它的后两个
    参数都是数组的形式。

    还有另外一种方法来解决上边的问题,jdo也有这样的方法,不过和hibernate的表现形式上有差别,但他们两个骨子里却是
    一样的,如:
    query q = sess.createquery("select employee.name from employee as employee where employee.name=:name");
    q.setstring("name", "jplateau");
    //当有多个参数的时候在此逐一定义
    iterator employees = q.iterate();

    9。order 语句
    和sql语句没什么差别,如:
    select employee.name from employee as employee where employee.name like 'j%' order by employee.id desc (或者asc)

    10。group by 语句
    同样和sql语句没什么差别,如:

    select employee.name,employee.depno from employee as employee group by employee.depno

    select foo.id, avg( elements(foo.names) ), max( indices(foo.names) ) from eg.foo foo group by foo.id
    {note: you may use the elements and indices constructs inside a select clause, even on databases with no subselects.}
    谁帮我解释一下上边两句,谢过!

    11。子查询
    hibernate同样支持子查询,写几个例子:

    from eg.cat as fatcat where fatcat.weight > ( select avg(cat.weight) from eg.domesticcat cat )

    分享到:
    评论

    相关推荐

      hibernate-hql语句大全

      hibernate 多对多hql语句写法

      hibernate案例与专题-hql语句。详细介绍了hibernatehql语句。

      hibernate hql查询 分页查询 模糊查询.docxhibernate hql查询 分页查询 模糊查询.docxhibernate hql查询 分页查询 模糊查询.docxhibernate hql查询 分页查询 模糊查询.docxhibernate hql查询 分页查询 模糊查询....

      hibernate的hql语句,基本与复杂都包括,单表查询等语句和多表的关联语句

      hql的全称是?...hql语句为:select jd.jdid,jd.jd from tbljd jd。怎样获得并显示查询结果? 使用'?'做占位符的参数查询,怎样设置参数的值? 命名参数查询的语法是? 怎样创建criteria查询对象?

      hibernate 中hql语句查询学习笔记

      hibernate hql查询语句总结.docx 网络下载的

      学习hibernate 的hql语句的不错选择,

      hibernate框架]hql语句in中带参数的写法

      hibernate hql语句 hql语言汇总

      hibernate中的关联查询实际上生成的是数据库表连接查询的sql语句

      hibernate hql基础练习小列子 数据库

      这是一个java代码包,里面提供了一个核心类,专门负责生成 hibernate查询语句(常用的,并非所有,现在能力有限),其他都是一些辅助类,自我感觉还可以。主要是为了减轻以后的项目开发负担,可以省去拼接hql查询语句的...

      1、掌握hibernate框架应用项目 2、学习hql参数查询和criteria查询 3、比较hql和criteria的不同 建立web项目,通过页面查询构造动态查询语句,struts2和hibernate框架整合。

      hibernate中的查询方法若hql,详细讲解hql与使用的具体例子

      hibernate源码中的hql语句代码,添加,删除,修改,查询;hibernate源码中的hql语句代码,添加,删除,修改,查询

      投影查询有三种方式: 1.直接查 2.查询返回对象 3.查询返回map键值对。。。。。。。。。。。。。。。。。。。。。。。。。。

    global site tag (gtag.js) - google analytics