hibernate中原生态sql语句以及加入Ehcache二级缓存

 Hibernate3.x允许使用手写SQL语句,包括存储过程,所有的创建,更新,删除和load操作。

应用程序将从会话创建一个原生SQL查询(Session接口上)createSQLQuery()方法:

public SQLQuery createSQLQuery(String sqlString) throws HibernateException
当传递一个包含SQL查询到createSQLQuery()方法,可以将SQL结果与任何现有的Hibernate实体,联接,或者一个标量结果使用addEntity()方法,addJoin(),和addScalar()方法关联的字符串。

标量查询:
最基本的SQL查询是从一个或多个表中得到标量(数值)的列表。以下是语法使用原生SQL标量的值:

String sql = "SELECT first_name, salary FROM EMPLOYEE" ;
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List results = query.list();
实体的查询:
上面的查询都是返回标量值,也就是从resultset中返回的“裸”数据。以下是语法通过addEntity()方法来从原生SQL查询获得实体对象作为一个整体。

String sql = "SELECT * FROM EMPLOYEE" ;
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Employee. class );
List results = query.list();

命名SQL查询:
以下是语法通过addEntity()方法来从原生SQL查询获得实体对象和使用命名SQL查询。

?
1
2
3
4
5
String sql = "SELECT * FROM EMPLOYEE WHERE id = :employee_id" ;
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Employee. class );
query.setParameter( "employee_id" , 10 );
List results = query.list();
以及加入二级缓存办法:


直接上测试代码

  1. @Test  
  2. public void testSQLQuery(){  
  3.     Session s = sf.openSession();  
  4.     Transaction tr = s.beginTransaction();  
  5.     SQLQuery q = s.createSQLQuery("select * from customers where id=1");  
  6.     q.setCacheable(true);  
  7.     Customer c=  (Customer) q.addEntity(Customer.class).uniqueResult();  
  8.     tr.commit();  
  9.     s.close();  
  10.       
  11. //上述代码会发出sql语句, 关闭session再开一个session, 以同样条件再次查询  
  12.     s = sf.openSession();  
  13.     tr = s.beginTransaction();  
  14.       
  15.     q = s.createSQLQuery("select * from customers where id=1");  
  16.     q.setCacheable(true);  
  17.     c=  (Customer) q.addEntity(Customer.class).uniqueResult();  
  18.     System.out.println(c.getName()); //再次查询, 没有发出sql,说明是从缓存中取的  
  19.     tr.commit();  
  20.     s.close();  
  21.                     } 
主要就是给指定返回的类型。。。。。。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值