Hibernate命名查询

-----------------------------------------------------------首先在User.hbm.xml配置-------------------------------------------------------------

  1. <hibernate-mapping>  
  2.  <class table="usertable" name="model.User" >  
  3.     
  4.   <cache usage="read-write"/>  
  5.     
  6.   <id name="id" column="id" unsaved-value="0">  
  7.    <generator class="native"/>  
  8.   </id>  
  9.   <property name="userName" column="username" not-null="true"/>  
  10.   <property name="password" column="password" not-null="true"/>  
  11.   <!-- <property name="deptId" column="dept_id"/> -->  
  12.   <many-to-one name="dept" class="model.Dept" column="dept_id" />  
  13.  </class>  
  14.  <query name="findByUserId">  
  15.   <![CDATA[ 
  16.    from User u where u.id=:id 
  17.   ]]>  
  18.  </query>//这个也可以写在class里面,但是写在这里要保证name是唯一的。  
  19.   
  20. //这里也可以写sql  
  21.   
  22. <sql-query name="findByUserName">  
  23.   <![CDATA[ 
  24.    select useName from usertable u where u.passWord=:password 
  25.   ]]>  
  26.  </sql-query>  
  27.   
  28. </hibernate-mapping>  


 

------------------------------------------------------------------dao层代码---------------------------------------------------------

  1. // 根据id查找用户  
  2.     public User findById(final Integer id)  
  3.     {  
  4.         // return (User)ht.get(User.class, id);  
  5.         return (User)ht.execute(new HibernateCallback()  
  6.         {  
  7.               
  8.             public Object doInHibernate(Session session)  
  9.                 throws HibernateException,  
  10.                     SQLException  
  11.             {  
  12.                 Query query = session.getNamedQuery("findByUserId");//这里findByUserId就是配置文件里的name值  
  13.                 query.setInteger("id", id);  
  14.   
  15.   
  16.                 User user = (User)query.uniqueResult();  
  17.                 // 初始化  
  18.                 Hibernate.initialize(user.getDept());//这里主要解决默认是延迟加载问题(报什么代理异常)。  
  19.                 return user;  
  20.             }  
  21.               
  22.         });  
  23.     }  


-------------------------------------测试代码-----------------------------------------------------------------------------------

  1. public class TestNameQuery  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         ApplicationContext context =  
  6.             new ClassPathXmlApplicationContext("applicationContext.xml");  
  7.         // 从容器中获取userService  
  8.         UserService userService = (UserService)context.getBean("userService");  
  9.           
  10.         User user = userService.findById(1);  
  11.           
  12.         System.out.println(user.getDept().getName());//延迟加载问题上面是一种解决方案,还可以在配置文件里lazy=“false”或者fetch=“select”  
  13.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值