Hiberante4 原生SQL查询 例子
By:Roy.LiuLast updated:2014-01-16
用hibernate4, 完全用ORM 做项目,原则上可以,其实有时候没有必要, 我见过有的项目为了取一个表的一条数据,而且只有一个字段的查询,居然也用hibernate 去做,更绝的是,这个查询里面还配置了 one to many 等关联,而且FetchType也不是lazy, 有必要这么做吗?我不是完全否决hibernate ,但用查询的时候,要注意什么时候该用Hibernate orM 去查,什么时候该自己去写 native sql 去查。
Hibernate4 native sql 查询其实很简单, 在前面的例子基础上,继续测试, 前面的例子可以参考这里,因为用到里面的数据表以及一些基本配置:
参考一:Hibernate4 mysql 采用XML 配置方式入门例子
参考一: Hibernate4 一对一双向主键关联测试例子
本例子用到的环境基本一样,唯一的区别在于测试类不同,原生SQL的测试类如下;
查看结果,可以看到hibernate native sql 正确的工作了,但请注意,在程序中用到了 .addEntity(Stock.class) ,如果没有这句话,那么程序的写法又不一样了。参考下面的例子:
这个时候,Hibernate 返回的是一个 List
Hibernate4 native sql 查询其实很简单, 在前面的例子基础上,继续测试, 前面的例子可以参考这里,因为用到里面的数据表以及一些基本配置:
参考一:Hibernate4 mysql 采用XML 配置方式入门例子
参考一: Hibernate4 一对一双向主键关联测试例子
本例子用到的环境基本一样,唯一的区别在于测试类不同,原生SQL的测试类如下;
package com.yihaomen.hibernate4.test; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import com.yihaomen.hibernate.domain.Stock; import com.yihaomen.hibernate.util.HibernateUtil; public class AppTest { public static void main( String[] args ) { System.out.println("Hibernate + MySQL"); Session session = HibernateUtil.getSessionFactory().openSession(); //session.beginTransaction(); Query query = session.createSQLQuery( "select * from stock s where s.STOCK_CODE = :stockCode") .addEntity(Stock.class) .setParameter("stockCode", "4715"); Listresult = query.list(); for(Stock stock : result){ System.out.println((stock.getStockName())); } //session.getTransaction().commit(); } }
查看结果,可以看到hibernate native sql 正确的工作了,但请注意,在程序中用到了 .addEntity(Stock.class) ,如果没有这句话,那么程序的写法又不一样了。参考下面的例子:
public static void main( String[] args ) { System.out.println("Hibernate + MySQL"); Session session = HibernateUtil.getSessionFactory().openSession(); Query query = session.createSQLQuery( "select * from stock s where s.STOCK_CODE = :stockCode") .setParameter("stockCode", "4715"); List result = query.list(); for(Object stock : result){ Object[] tmp = (Object[])stock; System.out.println(tmp[0].toString()); } }
这个时候,Hibernate 返回的是一个 List
Previous:django 一次性上传多个文件, 批量上传
COMMENTS