zoukankan      html  css  js  c++  java
  • Hibernate查询方式比较

    /2011年8月24日 09:32:26 by rush/

           本文旨在讨论使用Hibernate框架中进行的HQL查询和SQL查询中的使用方式,以及各种方法的使用方便程度,纯属个人观点,如果有什么不对的地方欢迎指教。开发环境为Myeclipse6.0,开发使用的框架为SSH(Spring+Struts+Hibernate)+(Ajax,JQuery,DWR)框架,后台数据库采用的是SQL Server2005数据库软件,项目部署是在JBoss4.0服务器上面,数据库连接采用JBoss JNDI的连接方式。

    1.首先,假设下面的表存在:

     1 create table test(
    2
    3 int id primary key identity(1,1), //id,主键,自增型
    4
    5 varchar(10) name, //姓名
    6
    7 int age,//年龄
    8
    9 varchar(1) sex//性别
    10
    11 )

    将上面的数据库表反向工程到项目中,即生成数据库表到数据库对象之间的对象关系映射,这一步不会的同鞋可以参考我的SSH环境搭建方面的文章,反向生成的对象如下:

     1 public class Test implements java.io.Serializable {
    2
    3 private int id;
    4
    5 private String name;
    6
    7 private int age;
    8
    9 private String sex;
    10
    11 public void setId(int id){
    12
    13 this.id = id;
    14
    15 }
    16
    17 public int getId(){
    18
    19 return this.id
    20
    21 }
    22
    23 .........................另外三个属性的getter和setter方法类似,这里省略。
    24
    25 }

    2.在DAO层中生成的一些方法例如:findById,findAll。。。。等等可以直接使用,我们现在说的是怎么自己写HQL查询语句,并读取返回的结果。

    String hql = " from Test t where  t.id = 1";//这是一个简单的HQL查询语句,可以使用DAO层提供的函数进行查询

    List<Test> list =  getHibernateTemplate().find(hql);//返回结果为list形式

    如果在list声明中指定了其类型,那么在使用的时候就不用进行强制类型转换这一步骤了,见下:

    int id = list.get(0).getId();

    如果没有指定类型:

    int id = (Test)list.get(0).getId();

    3.hibernate中的多表查询,现在假设对Test表和Student表进行查询,多表查询如果在对象关系映射中没有指定其对应关系,那么查询得到的结果是Object[]类型,查询结果里面每一条数据为Object类型,如果要对其进行继续处理,必须将其转换成其他类型,如果想了解具体的内容或者有疑问的地方可以给我留言。

    多表查询生成HashMap的方法,在写HQl语句的时候指定要查询的结果类型为HashMap类型,那么得到的查询结果将是键值对的形式,语句如下:

    String hql = " select new map( t.id as id,t.name as name,s.address as address ) from Test t,Student s ";

    List<Map> list = this.getSession().createQuery(hql).list()或者 getHibernateTemplate().find(hql);

    取值实例:

    Map map = new HaspMap();

    map = list.get(0);

    String name = map.get("name").toString();

    如果需要具体的实例代码,请留言。

    4.最后一种形式是直接的SQL查询语句,SQL查询的返回结果全部是数据没有列明的概念,因此返回的数据类型为Object格式,需要进行强制转化成其他的方式才能使用。

    5.在JSP页面中的使用:

           对象类型的直接使用对象名.属性名的方式使用即可;Object类型的需要根据下标来得到数据,即object[0],object[1]....;HashMap类型的与对象类型的使用方式相同,也是通过对象名.属性名的方式使用。

           由此可知,对于单表查询使用对象即可,对于多表查询又没有在对象关系映射中指定其对应关系,那么使用HaspMap的方式最方便,使用SQL直接查询的方式虽然有的时候能解决一些使用HQL不好解决的问题,但是其查询结果必须使用下标的形式才能得到,灵活性不够。

  • 相关阅读:
    Thinkphp 获取当前url
    Navicat Premium 11 For Mac 注册机
    android 客户端支付宝 php服务器端编写
    tp框架集成支付宝,中转页变成gbk编码
    sql,插入最大值加1
    获取php的配置
    百度授权回调问题
    模拟新浪微博textarea,刷新页面输入信息保留
    同一客户端使用多份SSH Key
    SSH 自动化安装部署遇到的问题
  • 原文地址:https://www.cnblogs.com/rushoooooo/p/2151588.html
Copyright © 2011-2022 走看看