美文网首页
Hibernate框架基础知识

Hibernate框架基础知识

作者: yyq唯心不易 | 来源:发表于2017-08-02 14:54 被阅读0次

    1.  抓取策略

    1.1 类级别检索

    当前的类的属性获取是否需要延迟。

    get:立即检索。get方法一执行,立即查询所有字段的数据。

    load:延迟检索。默认情况,load方法执行后,如果只使用OID的值(查询id)不进行查询,如果要使用其他属性值将查询。(会受到映射文件的配置影响)

    get不支持延迟加载,而load支持。

    当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常。

    1.2  关联级别检索

    (1)fetch="select"

    lazy="true":默认是懒 加载

    lazy="false":会立即发送sql名句去查询关联的数据

    共同点:

    lazy="true" VS lazy ="extra":都是懒加载,只有用到的时候才会去发送sql语句去查询

    区别:查询订单数的例子

    lazy="true":会发送查询所有数据的sql语句

    lazy ="extra":只会发送查询条数的sql语句

    (2)fetch="join"

    无论lazy属性设置任何值,都不会有效果,它都会用迫切左外连接去查询关联的数据。

    fetch="subselect"

    lazy="true":默认是懒 加载

    lazy="false":会立即发送sql名句去查询关联的数据

    共同点:

    lazy="true" VS lazy ="extra":都是懒加载,只有用到的时候才会去发送sql语句去查询

    区别:查询订单数的例子

    lazy="true":会发送查询所有数据的sql语句

    lazy ="extra":只会发送查询条数的sql语句

    (3)fetch="subselect" VS fetch="select"

    例子:查询客户的订单信息

    fetch="select" :发送多条select语句去查询

    fetch="subselect":只发送一条select语句,子查询的方式。

    2.  HQL

    HQL(Hibernate Query Language)描述对象操作的一种查询语言。

    与SQL不同的是,HQL是面向对象的查询,查询的是对象和对象中的属性

    注意:HQL中的关键字不区分大小写,但是类名和属性名区分大小写

    查询函数:

    //获取数据

    //获取唯一的值

    (1)查询所有:from Teacher

    (2)查询单个:select t from Teacher t where t.id = 1

    (3)投影:查询部分字段:select t.id,t.name from Teacher t

    (4)排序:from Teacher t order by t.id desc/asc(降序/升序)

    (5)分页:

    //开始位置

    query.setFirstResult(0);

    //设置一页个数

    query.setMaxResults(4);

    (6)绑定参数:

    方式一:from Teacher t where t.id=?

    //与SQL不同,这里是从0开始的

    query.setInteger(0,6);

    方式二:from Teacher t where t.id=:id

    query.setInteger("id",14);

    (7)聚合函数:

    select count(*) from Teacher

    select sum(t.id) from Teacher t

    (8)连接查询:

    1.交叉查询 (笛卡尔积:就是把A B两张表的所有组合打印出来)

    from Teacher t,Classes c

    2.隐式内查询

    from Father f,Son s where s.father=f

    3.显式内查询

    from Father f inner join f.sonSet

    4.迫切内查询

    from Father f inner join fetch f.sonSet

    (9)命名查询

    1.配置

    a)全局:*.hbm.xml   HQL语句

    b)局部: HQL

    2.获得

    a)全局:

    session.getNamedQuery("queryName")

    b)局部:

    session.getNamedQuery("className.queryName")需要使用类的全限定名称

    相关文章

      网友评论

          本文标题:Hibernate框架基础知识

          本文链接:https://www.haomeiwen.com/subject/ilzelxtx.html