Hibernate——————Session接口

Hibernate核心接口一共有六个,分别为Session,SessionFactory,Transaction,Query,Criteria,Configuration。

1、Configuration

        负责配置并启动Hibernate,创建SessionFactory对象。在hibernate的启动过程中,configuration类的实例首先定位映射文档位置、读取配置,获取一些底层实现的基本信息,其中几个关键属性包括:

        数据库URL

        数据库用户

        数据库用户密码

        数据库JDBC驱动类

        数据库方言,用于对特定数据库支持,包含了针对特定数据库特性的实现

调用以下代码:

    Configuration cfg=new Configuration().configure();

hibernate会自动在当前的CLASSPATH中搜索hibernate.cfg.xml文件,并将其加载至内存中,然后创建SessionFactory对象

2、SessionFactory

            负责初始化Hibernate.充当数据源的代理,通过Configuration实例来构建。

                         Configuration cfg=new Configuration().configure();

                          SessionFactory sf=sfg.bulidSessionFactory();

Configuration实例会根据当前的数据库配置信息,构造SessionFactory实例并返回。一旦构造完毕,即被赋予特定的配置信息。

也就是说,之后cfg的任何变更都不会影响到已经创建的SessionFactory,需要从configuration重新构建一个Session Factory实例。如果需要访问多个数据库,针对每个数据库,应分别为其创建对应的SessionFactory实例

3、Session

            Session接口负责执行被持久化对象的CRUD操作。该对象非线程安全。

            由SessionFactory构建:          

                         Configuration cfg=new Configuration().configure();

                          SessionFactory sf=sfg.bulidSessionFactory();

                            Session session=sf.openSession();

Session接口中提供了操纵数据库的各种方法:

                save():把Java对象保存到数据库中

                update():更新数据库中的Java对象

                delete():把Java对象从数据库中删除

                load():从数据库中加载Java对象

    Session是一个轻量级对象。通常将每一个Session实例和一个数据库事务绑定。每执行一个数据库事务,都应该先创建一个新的Session实例。如果执行中出现异常,应该撤销事务,不论执行成功与否,最后都因该调用Session的Close()方法,关闭Session释放占用的资源。

例:public void save(Student student) {
  Session session=GetSessionFactory.getSession();//
  Transaction tr=session.beginTransaction();//开启事务
  session.save(student);//保存对象,保存到数据库
  tr.commit();//提交事务
  session.close();
 }


4、Transaction

            是Hibernate的数据库事务接口,对底层事务接口做了封装,底层接口包括:JDBC API、JTA(Java Transaction API)、CORBA(Common Object Request Broker Architecture) API。

        负责事务相关的操作,可选的,可以自己设计编写底层事务处理代码


5、Query和Criteria

                    可以通过这两个接口进行数据查询

  Query query=session.createQuery("from Student where name=:sname");//执行查询语句,Student是类名,不是数据库表名,
                  //name是Student属性名
  query.setParameter("sname", student.getName());//设置属性
  List<Student> list=query.list();
  tr.commit();//提交事务

Query面向HQL和Native SQL,Criteria则提供了面向对象的查询模式


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值