Query query = session.getNamedQuery("getUserByName");
query.setParameter("name", name);
HibernateTemplate的常用方法简介:
void delete(Object entity):删除指定持久化实例
deleteAll(Collection entities):删除集合内全部持久化类实例
find(String queryString):根据HQL查询字符串来返回实例集合
findByNamedQuery(String queryName):根据命名查询返回实例集合
get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
save(Object entity):保存新的实例
saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
update(Object entity):更新实例的状态,要求entity是持久状态
setMaxResults(int maxResults):设置分页的大小
Hibernate中session.createQuery()与session.createSQLQuery()的区别与使用
Query createQuery ( String queryString)
创建一个查询字符串中给定的HQL 查询新的实例。
参数:HQL查询
返回值:Query查询
抛出异常:HibernateException
SQLQuery createSQLQuery ( String queryString)
创建一个新的查询字符串给定的SQL实例SQLQuery的。
参数:SQL查询
返回值:SQLQuery
抛出异常:HibernateException
简单来说,createQuery使用hql语句进行查询,以Hibernate生成的Bean为对象,并将对象装入List中返回。
createSQLQuery使用sql语句进行查询,是以对象数组形式返回。
createSQLQuery使用情况:
1:
SQLQuery query = session.createSQLQuery(sql).addScalar("XXXX",StandardBasicTypes.DATE)
.addScalar("XXXX",StandardBasicTypes.STRING)
.addScalar("XXXX",StandardBasicTypes.INTEGER)
.addScalar("XXXX",StandardBasicTypes.LONG)
.setInteger("XXXX", int)
.setDate("XXXX", date)
.setDouble("XXXX",double)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
setInteger,setDate,setDouble是为sql语句中由程序输入的判断条件赋值。
Transformers.ALIAS_TO_ENTITY_MAP是将最终查出结果设置为Map格式。
2:
Query query = session.createSQLQuery(sql)
.addScalar("XXXX",StandardBasicTypes.DATE)
.addScalar("XXXX",StandardBasicTypes.STRING)
.addScalar("XXXX",StandardBasicTypes.INTEGER)
.addScalar("XXXX",StandardBasicTypes.LONG)
.setInteger("XXXX", int)
.setDate("XXXX", date)
.setDouble("XXXX",double)
.setResultTransformer(Transformers.aliasToBean(XXXX.class));
Transformers.aliasToBean(XXXX.class)是将最终查询的结果转化成自定义或者Hibernate生成的Bean实体类的对象。
3:
Query query = session.createSQLQuery(sql).addEntity(XXXX.class);XXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。
hibernateTemplate的findByNamedQuery方法的使用
findByNamedQuery有三个重载方法:
findByNamedQuery(String queryName);
findByNamedQuery(String queryName,Object value);
findByNamedQuery(String queryName,Object[] values);
通过 queryName 查询数据库中的持久对象,而queyName是定义在此对象对应的hibernate的映射文件中的!
定义语法如下:
<query name="定义查询名">
<![定义查询语句]]>
</query>
例1:findByNamedQuery(String queryName);
<query name="all">
<![from User]]>
</query>
findByNamedQuery("all");
例2: findByNamedQuery(String queryName,Object value);
<query name="byname">
<![from User where u.name = ?]]>
</query>
findByNamedQuery("byname","tiger");
例3: findByNamedQuery(String queryName,Object values);
<query name="byNameAndAge">
<![from User where u.name = ? and u.age = ?]]>
</query>
findByNamedQuery("byNameAndAge",new Object[]{"tiger",18});