hibernate——简单的增删改查

增删改比较简单,查稍微复杂一点。查询有两种方式,一种是通过hql语句和Query接口来实现,一种是条件查询,通过Ctiteria接口来实现,下面举例说明:

[java]  view plain  copy
  1. UserDao接口:  
  2.   
  3. package com.suo.hibernate.dao;  
  4.   
  5. import java.util.List;  
  6.   
  7. import com.suo.domain.User;  
  8.   
  9. public interface UserDao {  
  10.     public void saveUser(User user);  
  11.     public User findUserById(int id);  
  12.     public List<User> findUserByName(String name);  
  13.     public void removeUser(User user);  
  14.     public void updateUser(User user);  
  15. }  
[java]  view plain  copy
  1. 获得session的工具类:  
  2.   
  3. package com.suo.hibernate.util;  
  4.   
  5. import java.io.Serializable;  
  6.   
  7. import org.hibernate.HibernateException;  
  8. import org.hibernate.Session;  
  9. import org.hibernate.SessionFactory;  
  10. import org.hibernate.Transaction;  
  11. import org.hibernate.cfg.Configuration;  
  12.   
  13. import com.suo.domain.User;  
  14.   
  15. public final class HibernateUtil {  
  16.       
  17.     private static SessionFactory sessionFactory;  
  18.       
  19.     /** 
  20.      * 私有的构造方法,这样就可以防止实例化这个类 
  21.      */  
  22.     private HibernateUtil(){}  
  23.       
  24.     /** 
  25.      * 因为读取配置文件和映射文件很耗时间,所以这段代码块定义成静态的,那么只加载一次就可以了 
  26.      */  
  27.     static{  
  28.         Configuration config=new Configuration();  
  29.         config.configure();//读取配置文件,默认的是读取hibernate.cfg.xml,若文件名不是这个,也可以以参数形式指定  
  30.         sessionFactory=config.buildSessionFactory();  
  31.     }  
  32.   
  33.     public static SessionFactory getSessionFactory() {  
  34.         return sessionFactory;  
  35.     }  
  36.       
  37.     public static Session getSession(){  
  38.         return sessionFactory.openSession();  
  39.     }  
  40. }  
[java]  view plain  copy
  1. 对接口的实现类:UserDaoImpl  
  2.   
  3. package com.suo.hibernate.impl;  
  4.   
  5. import java.util.List;  
  6.   
  7. import org.hibernate.HibernateException;  
  8. import org.hibernate.Query;  
  9. import org.hibernate.Session;  
  10. import org.hibernate.Transaction;  
  11.   
  12. import com.suo.domain.User;  
  13. import com.suo.hibernate.dao.UserDao;  
  14. import com.suo.hibernate.util.HibernateUtil;  
  15.   
  16. public final class UserDaoImpl implements UserDao {  
  17.   
  18.     public void saveUser(User user) {  
  19.         Session session=null;  
  20.         Transaction transaction=null;  
  21.         try{  
  22.             session=HibernateUtil.getSession();//获得一个连接  
  23.             transaction=session.beginTransaction();//开启一个事务  
  24.             session.save(user);  
  25.             transaction.commit();  
  26.         }catch(HibernateException e){  
  27.             if(transaction!=null){  
  28.                 transaction.rollback();  
  29.             }  
  30.             e.printStackTrace();  
  31.         }finally{  
  32.             if(session!=null){  
  33.                 session.close();  
  34.             }  
  35.         }  
  36.     }  
  37.   
  38.     /** 
  39.      * 通过session的get方法进行查询操作 
  40.      * @param id 通过主键来查询 
  41.      * @return 若存在则返回查询到对象,否则返回空 
  42.      */  
  43.     public User findUserById(int id) {  
  44.         Session session=null;  
  45.         try{  
  46.             session=HibernateUtil.getSession();  
  47.               
  48.             User user=(User)session.get(User.class, id);  
  49.               
  50.             return user;  
  51.               
  52.         }catch(HibernateException e){  
  53.             e.printStackTrace();  
  54.             return null;  
  55.         }finally{  
  56.             if(session!=null){  
  57.                 session.close();  
  58.             }  
  59.         }  
  60.     }  
  61.   
  62.     /** 
  63.      * 通过hql语句进行查询操作 
  64.      * @param name 通过name键来进行查询 
  65.      */  
  66.     public List<User> findUserByName(String name) {  
  67.         Session session=null;  
  68.         try{  
  69.             session=HibernateUtil.getSession();  
  70.               
  71.             String hql="from User as user where user.name=?";  
  72.             Query query=session.createQuery(hql);  
  73.             query.setString(0, name);  
  74.             List<User> list=query.list();  
  75.               
  76.             return list;  
  77.         }catch(HibernateException e){  
  78.             e.printStackTrace();  
  79.             return null;  
  80.         }finally{  
  81.             if(session!=null){  
  82.                 session.close();  
  83.             }  
  84.         }  
  85.     }  
  86.   
  87.     /** 
  88.      * 删除某个对象 
  89.      */  
  90.     public void removeUser(User user) {  
  91.         Session session=null;  
  92.         Transaction transaction=null;  
  93.         try{  
  94.             session=HibernateUtil.getSession();//获得一个连接  
  95.             transaction=session.beginTransaction();//开启一个事务  
  96.             session.delete(user);//这里不太明白,这里的user处于脱管状态,到底是怎么删除的呢?  
  97.             transaction.commit();  
  98.         }catch(HibernateException e){  
  99.             if(transaction!=null){  
  100.                 transaction.rollback();  
  101.             }  
  102.             e.printStackTrace();  
  103.         }finally{  
  104.             if(session!=null){  
  105.                 session.close();  
  106.             }  
  107.         }  
  108.     }  
  109.     /** 
  110.      * 更新某个对象 
  111.      */  
  112.     public void updateUser(User user) {  
  113.         Session session=null;  
  114.         Transaction transaction=null;  
  115.         try{  
  116.             session=HibernateUtil.getSession();//获得一个连接  
  117.             transaction=session.beginTransaction();//开启一个事务  
  118.             session.update(user);  
  119.             transaction.commit();  
  120.         }catch(HibernateException e){  
  121.             if(transaction!=null){  
  122.                 transaction.rollback();  
  123.             }  
  124.             e.printStackTrace();  
  125.         }finally{  
  126.             if(session!=null){  
  127.                 session.close();  
  128.             }  
  129.         }  
  130.     }  
  131.       
  132. }  

需要注意的是用session中的delete删除一个对象和用update更新一个对象,都是通过id来查找该对象的,通过它执行的sql语句可以知道,所以,在删除一个对象时,首先要new一个user,然后指明id,才会正确的删除和更新,此外,更新操作的sql语句是更新所有的除id之外的属性,所以,对于更新,除了要指明id之外,还要设置各个属性值,否则会全部置为默认值。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值