SSH与SSM学习之hibernate06——Session

SSH与SSM学习之hibernate06——Session

一、Session

session对象功能:

表达hibernate框架与数据库之间的连接(会话).session类似于
JDBC年代的connection对象.

还可以完成对数据库中数据的增删改查操作.

session是hibernate操作数据库的核心对象

数据的CRUD操作方法

Serializable save(Object object);//增

void delete(Object object);//删除

<T> T get(Class<T> entityType, Serializable id);//查询

二、Session对象的获取

通过SessionFactory工厂来获取的

 //3 获取session
 Session session = factory.openSession();

如果你想要查看 里面是怎么操作的,那么需要查看 SessionFactoryImpl类,如下

SessionFactoryImpl

public final class SessionFactoryImpl implements SessionFactoryImplementor {
    ...

    public Session openSession() throws HibernateException {
        return withOptions().openSession();
    }
    ...

    @Override
    public SessionBuilderImplementor withOptions() {
        return new SessionBuilderImpl( this );
    }
    ...
    static class SessionBuilderImpl<T extends SessionBuilder> implements SessionBuilderImplementor<T>, SessionCreationOptions {
        ....

        @Override
        public Session openSession() {
            log.tracef( "Opening Hibernate Session.  tenant=%s, owner=%s", tenantIdentifier, sessionOwner );
            final SessionImpl session = new SessionImpl( sessionFactory, this );

            for ( SessionEventListener listener : listeners ) {
                session.getEventListenerManager().addListener( listener );
            }

            return session;
        }

        ....

    }
    ...
}

三、Session添加数据

/**
 * 添加数据
 */
@Test
public void insert(){
     // 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
     final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
    // 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
    SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

    //3 获取session
    Session session = factory.openSession();

    //4 开启事务
    Transaction t = session.beginTransaction();

    //--------------------增加数据--------------------
    User user = new User("qixiaoming",120);
    //5 保存数据
    session.save(user);
    //或者使用 session.persist(user);
   //----------------------------------------

    //6 提交事务
    t.commit();
    //7 关闭session
    session.close();
}

数据库表结果

这里写图片描述


四、Session查数据

/**
 * 查询数据
 */
@Test
public void query(){
    // 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
    // 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
    SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

    //3 获取session
    Session session = factory.openSession();

    //4 开启事务
    Transaction t = session.beginTransaction();

    //--------------------查询数据--------------------
    //5 查询数据 <T> T get(Class<T> entityType, Serializable id);
    User user = session.get(User.class,6);
    System.out.println(user);
    //----------------------------------------

    //6 提交事务
    t.commit();
    //7 关闭session
    session.close();
}

结果

User{id=6, name='qixiaoming', age=120}

五、Session修改数据

/**
 * 修改数据
 */
@Test
public void update(){
    // 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
    // 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
    SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

    //3 获取session
    Session session = factory.openSession();

    //4 开启事务
    Transaction t = session.beginTransaction();

    //--------------------修改数据--------------------
    //5 查询数据 <T> T get(Class<T> entityType, Serializable id);
    User user = session.get(User.class,6);
    //修改数据
    user.setName("杞文明");
    //----------------------------------------

    //6 提交事务
    t.commit();
    //7 关闭session
    session.close();
}

数据库表结果

这里写图片描述


六、Session删除数据

/**
 * 删除数据
 */
@Test
public void delete(){
    // 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
    // 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
    SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

    //3 获取session
    Session session = factory.openSession();

    //4 开启事务
    Transaction t = session.beginTransaction();

    //--------------------删除数据--------------------
    //5 查询数据 <T> T get(Class<T> entityType, Serializable id);
    User user = session.get(User.class,6);
    // 删除数据
    session.delete(user);
    //----------------------------------------

    //6 提交事务
    t.commit();
    //7 关闭session
    session.close();
}

数据库表结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值