hibernate的方法运用

在hibernate中 只要引入 hibernate的相关jar包 那么我们就可以直接饮用hibernate的模板来调用hibernate的方法


增删改查的方法:
public List<User> findAllUsers() {  
        String hql = "from User u order by u.id asc";  
        List<User> list = this.getHibernateTemplate().find(hql);  
        return list;  
    }  
  
    public void removeUser(User user) {  
        this.getHibernateTemplate().delete(user);  
    }  
  
    public void updateUser(User user) {  
        this.getHibernateTemplate().update(user);  
    }  
  
    public User findUserById(int id) {  
        User user = null;  
        user = (User) this.getHibernateTemplate().get(User.class, id);  
        return user;  
    }  
      


get方法和find方法都是直接从数据库中检索
而load方法的执行则比较复杂
■ 首先查找session的persistent Context中是否有缓存,如果有则直接返回
■ 如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常
■ 如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null
■ 在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,并将initialized=true,如果找不到就抛出异常。





查询方法: (hql语句,返回的都是一个list)
(1)根据某一个条件查询所有的信息
list<user> list = this.getHibernateTemplate().find(hql,value);
注意: 上面的value指的是查询的条件参数,有几个参数写几个参数,中间用逗号分隔开;

(2)查询所有的信息 query语句
  通过Query接口进行参数填充:


Query query = session.createQuery("from TUser user where user.name=? and user.age>?"); 
query.setString(0,"Erica"); 
query.setInteger(1, 20);

(3)增加的方法用 session.save(user); session.getTransaction().commit();
(4)删除的方法 : User user=(User)session.load(User.class, "4028989545a244640145a24466300001"); 首先调用session.load(pojo.class,id)的方法查询
session.delete(user);  
session.getTransaction().commit();   
(5)修改的方法 User user=(User)session.load(User.class, "4028989545a244640145a24466300001");
session.update(user);  
session.getTransaction().commit();  


在hibernate中 获取session的方法: (最原始的方法,如果有框架模板封装,则不需要此方法)


Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式


1、getCurrentSession()获得与当前线程绑定的session

public class HibernateUtil {  

//将sessionFactory设为静态,可以保证其整个应用程序中的唯一性  

private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();  

private HibernateUtil(){};                              //将构造方法设为似有,只能使用“类名+静态方法”的方式调用  

/** 
* 获取Session工厂 
* @return  SessionFactory 
*/  
public static SessionFactory getSessionFactory(){  
return sessionFactory;  
}  

/** 
* 获取Session 
* @return      Session 
*/  
public static Session getSession(){  
return sessionFactory.getCurrentSession();  
}

2、openSession()打开一个新session


/** 
* Hibernate的帮助类,用来获取Session 
*
*/  
public class HibernateUtils {  
  private static SessionFactory factory;  
  
  static{  
  try{  
//读取hibernate.cfg.xml文件  
Configuration cfg=new Configuration().configure();  

//建立SessionFactory  
factory=cfg.buildSessionFactory();  
 
  }catch(Exception e){  
 e.printStackTrace();   
  }  
  }    
 
 //获得开启着的Session  
  public static Session getSession(){  
  return factory.openSession();  
  }  
 
 //关闭Session  
  public static void closeSession(Session session){  
  if(session!=null){  
  if(session.isOpen()){  
  session.close();  
  }  
  }  
  }  
 
  public static SessionFactory getSessionFactory(){  
  return factory;  
  }  
}

3、使用注意事项
1)openSession和getCurrentSession的区别


openSession必须关闭,currentSession在事务结束后自动关闭

openSession没有和当前线程绑定,currentSession和当前线程绑定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值