怎样将 from my.bean.Emp where empno = ? and empname = ?
转为jdbc执行的sql?
我现在能将my.bean.Emp 这个javaBean根据Hibernate配置转为相应的tablename,但后边的条件怎么转?有没有什么通用的方法
转为jdbc执行的sql?
我现在能将my.bean.Emp 这个javaBean根据Hibernate配置转为相应的tablename,但后边的条件怎么转?有没有什么通用的方法
解决方案 »
- struts1.3如何显示成某个jsp
- myeclipse 不能显示中文
- 从resin转到tomcat中应注意哪些问题
- 初学hibernate,表中的id怎么不能自动增加
- 从jndi得到的datasource实例,如何从此实例判断是否是支持XA的datasource?
- 问题,急急急急急急急急急
- 高分求TOMCAT+MSSQL2000的虚拟主机,UP有分~~
- 急求高手!!关于会话bean调用实体bean
- 请问什么叫servlet?ejb?作什么用?
- 使用HibernateTemplate保存数据到数据库,没有报错,正常打印sql语句,但是数据库中没有存入数据
- 超链接的实现
- Web开发,如果对界面进行模块化设计,比如一个页面有多个功能模块,需要时再添加进来,类似于C\S中的panle.
在Hibernate配置把属性empno,empname 转化为sql的字段就行啦嘛,这有什么问题嘛。
如果存在自定义对象,可以使用exists或者in关联在操作数据时:
String sqlString = "";
//这个是HQL的方法
Query queryObject = session.createQuery(sqlString);
//这个是原生SQL的方法
Query queryObject = session.createSQLQuery(sqlString);方法都支持占位符,你动态的条件也就是动态构造sqlString
Query queryObject = session.createQuery(sqlString);
//这个是原生SQL的方法
Query queryObject = session.createSQLQuery(sqlString); Select * from tablename where tablename.empno='"+XXX.getEmpno()+"' and tablename.empname ='"+XXX.getEmpname()+"';
原生SQL这种支不支持统计呢?比如我求某一列的sum ,max,avg等也会给转么?
说简单点,原生SQL就是把字符串传到数据,数据库去执行这个字符串
所以只要数据库支持的,他都支持
以前我用的一种方法就是建立一个临时表,里面有N个varchar2,number,date等类型的字段
其实起用途主要就是给hibernate映射,这样你就可以用HQL了如果用SQL,那你就看看JDBC吧,
PreparedStatement.set();
ResultSet.get();
呵呵,具体怎样,我也忘了,好久没用JDBC了
hql的统计是怎样做的?能给个例子么?
列名就是属性名
你有条件和没条件
那就是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 ++;
}思路就这样,不知道是不是你的意思,具体写法你自己看看,我也忘了
现在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等
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进去
JavaBean是未知的,JavaBean里有多少变量也是未知的,这个可以用户随意配,然后调用我写的这个方法就能把用户传来的别名转为真正的列名
通过读取配置文件节点等等
现在通常DAO做法
把查询方式写好,接受两个参数
queryString查询语句,values 集合类型的参数值