hibernate里使用JDBC查询示例代码

在使用hibernate的时候,有的时候需要用sql语句来执行,而HibernateDaoSupport方便了操作后,执行sql时候遇到不能执行的问题,   

下列方法是一个内部类来执行sql,可以写一个通用方法来执行sql,通常如果没有必要尽量不使用sql,但是有的时候就必须使用了,就想下列的查询分组查询,不想在hibernate中使用一对多关系,而又必须使用group by 哪么只能使用下列方式

import org.hibernate.HibernateException;      
import org.hibernate.Session;      
import org.springframework.orm.hibernate3.HibernateCallback;      
import java.sql.SQLException;      
import java.sql.Connection;      
import java.sql.PreparedStatement;      
import java.sql.ResultSet;      
     
public List<KnowledgeQueryBean> getKnowledgeQueryInfo() {      
         List<KnowledgeQueryBean> ListAll = new ArrayList<KnowledgeQueryBean>();      
        final String sql = "SELECT   ky.KNOWLEDGEQUERYID,ky.TITILE,ky.CREATEDATE,eu.USERNAME ,ky.USERID,COUNT(kyr.KNOWLEDGEQUERYID) AS COUNT"+      
                " FROM   KNOWLEDGEQUERY ky LEFT JOIN KNOWLEDGEQUERYANSWER kyr ON   ky.KNOWLEDGEQUERYID =   kyr.KNOWLEDGEQUERYID" +      
                " LEFT JOIN EOM_USER eu   ON ky.USERID = eu.USER_ID"+      
                " GROUP BY ky.KNOWLEDGEQUERYID,ky.TITILE,ky.CREATEDATE,eu.USERNAME,ky.USERID ORDER BY ky.CREATEDATE DESC";      
         ListAll = (List<KnowledgeQueryBean>)this.getHibernateTemplate().execute(      
                new HibernateCallback(){      
                    public Object doInHibernate(Session session)      
                    throws HibernateException, SQLException {      
                     Connection con = session.connection();      
                     PreparedStatement ps = con.prepareStatement(sql);      
                     ResultSet rs = ps.executeQuery();      
                     List<KnowledgeQueryBean> all = new ArrayList<KnowledgeQueryBean>();      
                    while(rs.next()){      
                         KnowledgeQueryBean kqb = new KnowledgeQueryBean();      
                         kqb.setKnowledgeQueryId( rs.getLong("KNOWLEDGEQUERYID"));      
                         kqb.setTitle(rs.getString("TITILE"));      
                         kqb.setCreateDate(rs.getDate("CREATEDATE"));      
                         kqb.setContent(rs.getString("USERNAME"));      
                         kqb.setUserId(rs.getLong("USERID"));      
                         kqb.setCount(rs.getInt("COUNT"));      
                         all.add(kqb);      
                     }      
                     rs.close();      
                     ps.close();      
                     session.flush();      
                     session.close();      
                    return all;      
                     }      
                 }      
         );      
        return ListAll;      
     }

转载于:https://my.oschina.net/arlenmiao/blog/157987

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值