怎样将 from my.bean.Emp where empno = ? and empname = ?
转为jdbc执行的sql?
我现在能将my.bean.Emp 这个javaBean根据Hibernate配置转为相应的tablename,但后边的条件怎么转?有没有什么通用的方法

解决方案 »

  1.   

    你都能能将my.bean.Emp 这个javaBean根据Hibernate配置转为相应的tablename。
    在Hibernate配置把属性empno,empname 转化为sql的字段就行啦嘛,这有什么问题嘛。
      

  2.   

    这个条件可能是后来动态设的,不好解析,难不成我还能根据比较符截取得到empno,empname之类的然后再去转?
      

  3.   

    Select * from tablename where empno=? and empname = ?
      

  4.   

    遍历你的javaBean属性,匹配是否存在,然后从<property name="empno"节点 找到<column name=“”
      

  5.   

    你的JavaBean的名字叫什么?比如XXXSelect * from tablename where tablename.empno='"+XXX.getEmpno()+"' and tablename.empname ='"+XXX.getEmpname()+"';
      

  6.   

    from my.bean.Emp where empno = ? and empname = ?  把 Emp.hbm.xml里面的 empNo和empName对应的 table column 换掉就可以了。
      

  7.   

    HQL改SQL:就是把类名该成表名,属性名改成列名
    如果存在自定义对象,可以使用exists或者in关联在操作数据时:
    String sqlString = "";
    //这个是HQL的方法
    Query queryObject = session.createQuery(sqlString);
    //这个是原生SQL的方法
    Query queryObject = session.createSQLQuery(sqlString);方法都支持占位符,你动态的条件也就是动态构造sqlString
      

  8.   

    //这个是HQL的方法 
    Query queryObject = session.createQuery(sqlString); 
    //这个是原生SQL的方法 
    Query queryObject = session.createSQLQuery(sqlString); Select * from tablename where tablename.empno='"+XXX.getEmpno()+"' and tablename.empname ='"+XXX.getEmpname()+"';
      

  9.   


    原生SQL这种支不支持统计呢?比如我求某一列的sum ,max,avg等也会给转么?
      

  10.   

    所有的都是动态的,我要个通用的东西,不能写死这个JavaBean
      

  11.   

    HQL都只支持统计,更不要说原生SQL
    说简单点,原生SQL就是把字符串传到数据,数据库去执行这个字符串
    所以只要数据库支持的,他都支持
      

  12.   

    我说反了,我是想问HQL支不支持这种统计,也用Query么,那么返回来的对象是什么样的?
      

  13.   

    就是做个统计,然后传过来的条件时HQL里配置的别名,想给它转为真正的列名
      

  14.   

    我觉得哦,如果表名可以的话,那把数据库的字段和po中的属性,是一样的及行啦select * from tablename where 字段1=? and 字段2=? 
      

  15.   

    你做统计,一般的SUM,COUNT等等HQL都支持的,
    以前我用的一种方法就是建立一个临时表,里面有N个varchar2,number,date等类型的字段
    其实起用途主要就是给hibernate映射,这样你就可以用HQL了如果用SQL,那你就看看JDBC吧,
    PreparedStatement.set();
    ResultSet.get();
    呵呵,具体怎样,我也忘了,好久没用JDBC了
      

  16.   

    现在就是想用jdbc执行,但是当有条件时,传入的是别名,想转为列名
    hql的统计是怎样做的?能给个例子么?
      

  17.   

    你的意思没太懂,
    列名就是属性名
    你有条件和没条件
    那就是SQL语句构造问题
    在JAVA用一个IF就解决了的事情啊。。
    比如你的那个:
    int index = 1;
    String sql = "from my.bean.Emp where 1 = 1"; 
    if(empno != null){
       sql += " and empno = ?";
       PreparedStatement.setString(index,empno);
       index ++;

    if(empname != null){
       sql += " and empname = ?";
       PreparedStatement.setString(index,empname );
       index ++;
    }思路就这样,不知道是不是你的意思,具体写法你自己看看,我也忘了
      

  18.   

    我就是想把一个hql转为sql
    现在hql语句为 from my.bean.Emp where empno = ? and empname = ?
    现在我通过JavaBean的配置文件已经将my.bean.Emp转为具体的表名了Emp,怎么能将empno转为具体的列名呢?
    因为where后面的条件是不固定的,现在是empno = ? and empname = ?,下次可能传入得是empid like ? and empno > ? 现在就是想将这些别名转为具体的表中的列名,如no,name,id等
      

  19.   

    int index = 1; 
    String sql = "select * from emp where 1 = 1"; 
    if(empno != null){ 
      sql += " and empno = ?"; 
      PreparedStatement.setString(index,empno); 
      index ++; 

    if(empname != null){ 
      sql += " and empname = ?"; 
      PreparedStatement.setString(index,empname ); 
      index ++; 
    } if(empname != null){ 
      sql += " and empname like ?"; 
      PreparedStatement.setString(index,empname ); 
      index ++; 
    }if(id!= null){ 
      sql += " and id= ?"; 
      PreparedStatement.setString(index,id); 
      index ++; 
    }
    这样就是能动态构造一个SQL语句,然后传给List results = session.createQuery(sql);
    返回值是for (int i = 0; i < results.size(); i++) {
    Object[] rs = (Object[]) results.get(i);
    emp.setId((int)rs.get(0));
    }
    基本就这样。老兄自己解决了
    你用JDBC要新建一个JAVABEAN,得到的结果,按上面循环一个一个的SET进去
      

  20.   

    上述的name,id我只是举个例子,我这个是要通用转,传的JavaBean是不一定的,这次传的是Emp,下次可能JavaBean就变成了City
    JavaBean是未知的,JavaBean里有多少变量也是未知的,这个可以用户随意配,然后调用我写的这个方法就能把用户传来的别名转为真正的列名
      

  21.   

    那只有你自己去写了,通过反射
    通过读取配置文件节点等等
    现在通常DAO做法
    把查询方式写好,接受两个参数
    queryString查询语句,values 集合类型的参数值
      

  22.   

    唉,看来实现很难,只能另想办法了,通过java反射是一定的,但是循环替换不是好办法,辛苦你了,结贴