Hibernate之session

Session


Session是hibernate向应用程序提供操作数据库最主要的接口,它提供了基本的保存、删除、更新和加载java对象的方法。


它具有一个缓存(一级缓存),位于缓存中的对象与数据库相关记录对应。


单表的curd:


CURD代表创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作



hibernate的操作数据库方式有:


1.添加一条记录:session.save();


2. 删除一条记录:session.delete();


3. 修改一条记录:session.update();


4. 查询一条记录:session.get()/session.load();


新增


public void add(News news){

                   //获取session

                   Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();

                   //开启事物

                   session.beginTransaction();

                   //执行操作

                   session.save(news);

                   //提交事物

                   session.getTransaction().commit();

         }


查询(Get方法)


public NewsgetNewsByget(intnewsid){

                   //获取session

                   Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();

                   //开启事物

                   session.beginTransaction();

                   News news=(News)session.get(News.class, newsid);

                   //提交事物

                   session.getTransaction().commit();

                   returnnews;

         }



查询(Load方法)


public News getNewsByload(int newsid){

                   //获取session

                   Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();

                   //开启事物

                   session.beginTransaction();

                   News news=(News)session.load(News.class, newsid);

                   Hibernate.initialize(news);

                   //提交事物

                   session.getTransaction().commit();

                   returnnews;

         }



get()和load()不同点



1、  get()一旦调用,马上去查询数据库,及时数据库没有数据,也会发送一个完整的sql语句。如果查询不到数据,不会报错,有数据时,外界可以直接调用该方法的返回值,获取数据。


2、load()调用后,不会马上查询数据库,而在你真正去获取非id的数据时才会想到查询

数据库(懒惰方法),如果数据库没有数据,会报错,有数据,外界直接调用该方法获取不到数据,并且还会有异常。可以再load方法里面,给需要查询的对象做一个初始化,如Hibernate.initialize(users);再给外界调用就不会出错了。


修改


public void update(News news){

                   //获取session

                   Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();

                   //开启事物

                   session.beginTransaction();

                   session.update(news);

                   //提交事物

                   session.getTransaction().commit();

         }


删除


         publicvoid delete(int newsid){

                   //获取session

                   Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();

                   //开启事物

                   session.beginTransaction();

                   News news =(News)session.get(News.class, newsid);

                   session.delete(news);

                   session.delete(n);

                   //提交事物

                   session.getTransaction().commit();

         }



关于session的一级缓存:


在session接口的实现中包含一系列的java集合,这些java集合构成了session的缓存,只要session实例没有结束生命周期,且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期。


Session缓存可有效减少应用程序访问数据库的频率。


 


public void testSession() {

                   Newsnews1 = (News)session.get(News.class,1);

                   System.out.println(news1);

                  

                   Newsnews2 = (News)session.get(News.class,1);

                   System.out.println(news2);

         }





flush:使数据表中的记录和session缓存中的对象保持一致

refresh():会强制发送select语句,以使session缓存中对象的状态和数据表中的记录保持一致

Clear():清楚缓存所有内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值