Hibernate Spring 回調 jdbc 執行查詢

來源:互聯網
上載者:User

getHibernateTemplate().find()只支援HQL的。
要用Sql或預存程序的話,這樣用:
        final String sql="....";
        return this.getHibernateTemplate().executeFind(new HibernateCallback(){
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                Connection conn=session.connection();
                //使用JDBC.....
                return ...;
            }
        });
Hibernate3的話,可以用SQLQuery;
--------------------------------------------------------------------------------------

另一個例子。

回調執行查詢:

 

public List getInfoByPasId(int pasId) {</p><p> PlanSplitAndApplyInfo planSplitAndApplyInfo;</p><p> List lst = new ArrayList();<br />String sql = "SELECT bff.* FROM PlanSplitAndApplyInfo bff WHERE bff.pasId="+pasId;<br />try{<br />lst = this.getHibernateTemplate().find(sql1);</p><p>Connection con = this.getHibernateTemplate().getSessionFactory().openSession().connection();</p><p>Statement stat = con.createStatement();<br />ResultSet set= stat.executeQuery(sql);</p><p>while(set.next()){<br />planSplitAndApplyInfo = new PlanSplitAndApplyInfo();<br />planSplitAndApplyInfo.setAosId(Integer.parseInt(set.getString(5)));<br />planSplitAndApplyInfo.setApplyClazz(set.getString(4));<br />planSplitAndApplyInfo.setApplyField(set.getString(3));<br />planSplitAndApplyInfo.setApplyType(set.getString(2));<br />planSplitAndApplyInfo.setPasId(Integer.parseInt(set.getString(1)));<br />lst.add(planSplitAndApplyInfo);</p><p>}<br />set.close();<br />stat.close();<br />con.close();<br />}catch(DataAccessException t){<br />t.printStackTrace();<br />throw t;<br />}catch(Exception t1){<br />t1.printStackTrace();</p><p>}<br />return lst;<br />}

 

回調執行刪除:

 

/**<br /> * 根據ppfId ,刪除PlanPackageRelations。<br /> * @param ppfId<br /> */<br />public void deletePlanProjectApplyInfo(String ppfId){<br /> final String ppfIdFinal = ppfId;<br /> try {</p><p> this.getHibernateTemplate().execute(new HibernateCallback(){<br /> public Object doInHibernate(Session session) throws HibernateException, SQLException {<br /> List result = new ArrayList();<br /> String sql = "delete PlanProjectApplyInfo where ppfId = :ppfId";<br /> Query query = session.createQuery(sql).setString("ppfId",ppfIdFinal);<br /> result.add(new Integer(query.executeUpdate()));<br /> return result;<br /> }</p><p> });</p><p> }catch(DataAccessException t){<br />t.printStackTrace();<br />throw t;<br />}catch (Exception e) {<br /> e.printStackTrace();<br /> }<br />}

------------------------------------------------------------------------

 

使用hibernate的session,取得一個串連,然後用jdbc.

直接回調JDBC介面嘛!會spring吧?spring+hibernate回調的代碼給你:

public   RowSetDynaClass   findBySQL(String   queryString,   Object[]   params)   {
Session   session   =   this.getHibernateTemplate().getSessionFactory()
.openSession();
Connection   conn   =   session.connection();
RowSetDynaClass   result   =   null;
try   {
PreparedStatement   ps   =   conn.prepareStatement(queryString);
for   (int   i   =   0;   i   <   params.length;   i++)   {
Object   param   =   params[i];
ps.setObject(i   +   1,   param);
}
ResultSet   rs   =   ps.executeQuery();
result   =   new   RowSetDynaClass(rs);
rs.close();
ps.close();
session.close();

}   catch   (SQLException   e)   {
logger.error( "Method:findBySQL(String   queryString,   Object[]   params) ",   e);
}

return   result;
}

RowSetDynaClass是org.apache.commons.beanutils下的一個類,自己從網上下就是了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.