关于Hibernate查询方法的

点赞:4575 浏览:16229 近期更新时间:2024-04-04 作者:网友分享原创网站原创

摘 要:本文探讨了Hibernate查询的五种方法:HQL查询,本地SQL查询,命名查询,对象化查,动态分离查询.

关 键 词:HQL查询;本地SQL查询;命名查询;对象化查询;动态分离查询

中图分类号:TP312.1文献标识码:A文章编号:1007-9599(2012)20-0000-02

Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,完成数据持久化的重任.本文举例探讨了Hibernate查询的五种方法:

1HQL查询(HibernateQueryLanguage)

1.1HQL是Hibernate查询语言,是一种面向对象的查询语言,操作的对象是类、实例、属性等,是一种select等from的语法结构,from后跟的是实体类名,而不是表名.

示例1:

Queryquery等于session.creatQuery("fromUser");

Listlist等于query.list();

查询返回的类型可以为:Object[]数组、List类型、Map类型、Ja实体对象.

示例2:

Queryquery等于session.creatQuery("selectu.name,u.telephonefromUseruwherename等于:name");//使用命名参数查询

query.setString("name",name);

Listlist等于query.list();

HQL提供一种面向对象的查询语言,其语法更接近传统的SQL语句的查询语法.使用HQL能够避免使用JDBC查询的一些弊端:首先,不需要再编写繁琐的SQL语句,将针对实体类及其属性进行查询,其次,查询结果是直接存放在List中的对象,不需要再次封装.而且HQL独立于数据库.

2本地SQL查询

HQL查询功能虽然强大,但是HQL不能涵盖所有的查询特性,有时不得不借助SQL达到期望的目标.HQL对本地SQL查询提供了内置的支持,称为本地SQL查询:

关于Hibernate查询方法的参考属性评定
有关论文范文主题研究: 数据库相关论文范文 大学生适用: 高校毕业论文、学术论文
相关参考文献下载数量: 68 写作解决问题: 写作参考
毕业论文开题报告: 论文任务书、论文总结 职称论文适用: 职称评定、职称评中级
所属大学生专业类别: 写作参考 论文题目推荐度: 经典题目

示例3:

Queryquery等于session.createSQLQuery("select*fromt_user").addEntity(User.class);

Listrs等于query.list();

"select*fromt_user"为SQL语句,from后为表名.此方法的缺点是破坏跨平台,不面向对象.

3命名查询

Hibernate中可以命名常用的查询,需要使用的是只需要引用名称就可以了,命名查询一般配置在实体类中.

3.1XML配置命名查询

示例4:

<![CDATA[fromUserwhereid=:id]]>

Queryquery等于session.getNamedQuery("getUserById");


query.setInteger("id",id);

Listlist等于query.list();

这种方法以松耦合的方式来配置查询语句,从而可以更好地提高程序解耦.

3.2@配置命名查询

使用@注解配置实体类时,要使用@注解配置命名查询,用到的Ja注解为@NamedQuery与@NamedNativeQuery.

示例5:

@NamedQuery(name等于"allUser",query等于"fromUser")//命名查询

@NamedNativeQuery(name等于"allUser",query等于"select*fromtab_user")//命名本地查询

@Entity

@Table(name等于"tab_user")

PublicclassUser{

}

Queryquery等于sesssion.getNamedQuery("allUser")

4对象化查询Criteria方法:

4.1Criteria查询采用面向对象的方式封装查询条件,对SQL语句进行封装,采用对象的方式来组合各种查询条件,由Hibernate自动产生SQL查询语句.

示例6:

Criteriacriteria等于Session.createCriteria(User.class);

criteria.add(Restrictions.eq("name",name));

criteria.add(Restrictions.eq("pwd",pwd));

Listlist等于criteria.list();

使用Criteria查询需要首先创建criteria对象,传入的参数是对应的实体类的类型对象.4.2Example查询

在使用criteria查询时,设定查询条件并非一定要使用Restrictions,如果属性条件很多,使用Restrictions也不方便.如果已经有了一个对象,那就可以根据这个对象作为查询的条件,查询出属性与之类似的对象.

示例7:

Useruser等于newuser();

User.setAge(20);

Listusers等于session.createCriteria(User.class).add(Example.create(user)).list();

5动态分离查询DetachedCriteria

以上所有查询都必须是在session保持连接的情况下进行的,有时查询需要将组织查询条件与执行查询分开来进行,这时在创建查询条件的时候就不能使用Criteria类了,而须使用DetachedCriteria类;

示例8:

a.先创建一个离线查询条件对象

DetachedCriteriadc等于DetachedCriteria.forClass(User.class);//加入查询条件

dc.add(Restrictions.ge("age",newInteger(25)));

b.将创建的离线查询对象当成参数传递给session来创建一个Criteria对象,然后执行查询

Sessionsession等于HibernateSessionFactory.getSession();//绑定Session并返回一个Criteria实例

Criteriacriteria等于dc.getExecutableCriteria(session);

ListuserList等于criteria.list();

通过这种方法可以实现查询条件对象与执行查询分别在两个不同类中进行;当然b最常见应该是在一个类的方法中.

6结束语

通过以上示例探讨了Hibernate查询的五种方法,方便Ja程序员灵活的运用这些方法,操纵数据库,完成数据持久化的任务.