« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9692696 建立时间:2004年12月20日 |

| |
[java语言]hibernate使用native sql 原创空间
邢红瑞 发表于 2005/5/11 18:59:40 |
一般来说,hibernate的HQL足够强大,不需要使用native sql,但是有时为了效率和满足特殊的要求,必须要使用native sql。例如 动态从各个表中,查处记录数,由于表名不同,无法使用PreparedStatement,无法使用HQL。使用native sql很简单private static final Log log = LogFactory.getLog(GenericDAO.class); public Integer getcount(String sql) { Session hsession = null; try { hsession = getSession(); Integer query = (Integer)hsession.createSQLQuery(sql).addScalar( "count" , Hibernate.INTEGER).uniqueResult(); return query; } catch (RuntimeException re) { log.error("find by example failed", re); throw re; } finally { if (hsession != null) hsession.close(); } }注意alias 赋予类型,那么 sql 就需要变成以 ”select count(*) as count ” 开头了或者rivate BigInteger getCountByNativeSQL( final String sql) { 2 3 return (BigInteger) getHibernateTemplate().execute( 4 5 new HibernateCallback() { 6 7 public Object doInHibernate(Session session) 8 9 throws HibernateException {10 11 return (BigInteger) (session.createSQLQuery(sql).uniqueResult());12 13 } 14 15 } );16 17 } 18 就返回 BigInteger |
|
|