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

xiaoxiao2021-02-28  92

 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(); 以及加入二级缓存办法:

直接上测试代码

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

转载请注明原文地址: https://www.6miu.com/read-46375.html

最新回复(0)