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();
}
数据库表结果