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():清楚缓存所有内容