Hibernate深入浅出(二十二)-----读深入浅出hibernate有感

Hibernate深入浅出(二十二)-----读深入浅出hibernate有感

    HQL作为Hibernate的查询语言,提供了ANSI SQL面向对象的封装形式。
    与Criteria和HQL互为补充,Hibernate也提供了对原生SQL以及存储过程的支持,相对于JDBC的SQL操作,Hibernate提供了更为妥善的封装。代码如下:

package  com.testproject.hibernate;

import  java.util.Iterator;
import  java.util.List;

import  org.hibernate.Query;
import  org.hibernate.Session;

public   class  HibernateSqlQuery  {
    Session session 
= null;
    
public void querySql(){
        String sql 
= "select {usr.*} from T_User usr";
        List list 
= session.createSQLQuery(sql).addEntity("usr", TUser.class).list();
        Iterator it 
= list.iterator();
        
while(it.hasNext()){
            TUser user 
= (TUser)it.next();
        }

    }

    
public void queryMappingSql(){
        Query query 
= session.getNamedQuery("queryUser");
        query.setParameter(
"name","Erica");
        Iterator it 
= query.list().iterator();
        
while(it.hasNext()){
            TUser user 
= (TUser)it.next();
        }

    }

}

 

<? xml version="1.0" ?>
<! DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
< hibernate-mapping >
    
< class  name ="com.testproject.hibernate.TUser"  table ="T_USER" >
        
< id  name ="id"  column ="id" >
            
< generator  class ="native" ></ generator >
        
</ id >
    
</ class >
    
< sql-query  name ="queryUser" >
        
<![CDATA[
            select {usr.*} from T_User usr where name=:name
        
]]>
        
< return  alias  = "usr"  class ="com.testproject.hibernate.TUser" ></ return >
    
</ sql-query >
    
<!--  基于存储过程查询 sql-query节点的callable属性设定为true,指明当前查询基于存储过程定义 -->
    
< sql-query  name ="getUsersByAge"  callable ="true" >
        
< return  alias ="user"  class ="com.testproject.hibernate.TUser" >
            
< return-property  name ="id"  column ="ID" ></ return-property >
            
< return-property  name ="name"  column ="NAME" ></ return-property >
            
< return-property  name ="age"  column ="AGE" ></ return-property >
        
</ return >
        {?=call getUsersByAge(?)}
    
</ sql-query >
</ hibernate-mapping >






    与HQL相同,Native SQL也可以在实体映射文件中进行配置:

你可能感兴趣的:(Hibernate深入浅出(二十二)-----读深入浅出hibernate有感)