zoukankan      html  css  js  c++  java
  • Hibernate SessionFactory的创建和session的获取

    1,当我们调用 Configuration config=new Configuration().configure();

           时候Hibernate会自动在当前的CLASSPATH中搜寻hibernate.cfg.xml文件并将其读取到内存作为后继操作的基础配置。

     我们也可以指定配置文件名,如果不希望使用默认的hibernate.cfg.xml文件作为配置文件的话:

       

    SessionFactory

         SessionFactory 负责创建Session的实例。我们可以通过Configuation实例创建SessionFactory;

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

            SessionFactory sessionFactory=config.buildSessionFactory();

    Configuration 实例config 会根据当前的配置信息,构造SessionFactory实例并返回。SessionFactory一旦构建完毕,即被赋予特定的配置信息。也就是说,之后config的任何变更将不会影响到已经创建的SessionFactory实例(SessionFactory)。如果需要使用基于改动后的config实例的SessionFactory,需要从config重新构建一个SessionFactory实例。

    Session

       Session 是持久层操作的基础,相当于JDBC中的Connnection。

               Configuration config=new Configuration().configure();  //读取默认的hibernate.cfg.xml的文件

               SessionFactory sessionFactory=config.buildSessionFactory();  //通过config创建sessionFactory的实例

               Session session=sessionFactory.openSession();       //获得session

    之后,我们就可以调用Session所提供的save,find,flush等方法完成持久化操作:

             看例Save:

       TUser user=new TUser();

       user.setName("yuanliang");

       session.save(user);

       session.flush();//Session.flush方法强制数据库同步,这里既强制Hibernate将user实例立即同步到数据库中。在事物提交的时候和Session关闭的时候,也会自动执行flush方法

       

    find()//这个方法返回一个List

       List list=Session.find(From TUser as tu order by tu.name asc);

    Load() //这个方法返回是一个对象

       Customer c=(Customer)session.load(Customer.class,customer_id);

    修改数据:

    1. 将要修改的数据从数据库读出,赋值给表对应的持久化类

     Query query = session.createQuery("from User as u where list = query.list();
     User usr = (User)list.get(0);

    2. 对得到的持久化对象进行修改
     usr.setUsername("Look");
    3. 启动事务管理
       Transaction ts = session.beginTransaction();

    4. 将赋值后的持久化对象提交给session
      
     session.save(usr);
    5. 结束事务管理并向数据库提交
     ts.commit();

    -------------------------------
    public void update(){
      
      Integer Integer(2);
      Transaction ts = null;
      try {
       Session session = HibernateSessionFactory.currentSession();
       
       Query query = session.createQuery("from User as u where list = query.list();
       User usr = (User)list.get(0);
       usr.setUsername("Look");
       
       ts = session.beginTransaction();
       session.save(usr);
       
       ts.commit();
       
      } catch (HibernateException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       try {
        ts.rollback();
       } catch (HibernateException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
       }
      }
     }

    欧克蓝科技
  • 相关阅读:
    mha 安装部署报错 failed: Attempt to reload DBD/mysql.pm aborted
    zabbix 不能触发动作产生告警
    zabbix 编译安装
    zabbix 解决中文乱码
    virtualbox 配置虚拟机能够和宿主机相互通信
    INCEPTION 编译过程报错 make[2]: * [sql/CMakeFiles/sql.dir/sql_yacc.cc.o] Error
    数据库运维平台
    mysql 归档工具 pt-archiver
    java面试基础篇
    非对称和对称加密结合
  • 原文地址:https://www.cnblogs.com/sias/p/4164315.html
Copyright © 2011-2022 走看看