数据库查询

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);


addScalar是为sql语句中要查询的字段设置类型。
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});

 

posted @ 2019-03-19 11:13  愚蠢的程序员  阅读(331)  评论(0编辑  收藏  举报