SessionFactory 接口负责Hibernate的初始化和建立Session对象。它在Hibernate中启到一个缓冲区的作用,hibernate可以将自动生成的SQL 语句、映射数据以及某些可重复利用的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系,维护了当前的二级缓存。
(2)修改
SessionFactory具有以下特点:
(1)它是线程安全的,它的同一实例能够供多个线程共享。
(2它是重量级的,不能随意的创建和销毁它的实例。
由于SessionFactory的这些特点,一般情况下,一个项目只需要一个SessionFactory,只有当应用中存在多个数据源时,才为每个数据源建立一个SessionFactory实例。因此,在实际项目使用中,通常会抽取一个HibernateUtils的工具类,用来提供SessionFactory对象。
代码如下:
- package cn.Unit;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- public class HibernateUtils {
- //声明一个私有的静态 final 类型的 Configuration 对象
- private static final Configuration config;
- //声明一个私有的静态 final 类型的 SessionFactory 对象
- private static final SessionFactory factory;
- //通过静态代码块构建 SessionFactory
- static{
- config = new Configuration().configure();
- factory = config.buildSessionFactory();
- }
- public static Session getSession(){
- return factory.openSession();
- }
- }
实现增删改查操作:
(1)增加
- package cn.test;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import cn.Unit.HibernateUtils;
- import cn.domain.Student;
- public class Add {
- public static void main(String[] args) {
- Session session = HibernateUtils.getSession();
- Transaction tx = null;
- try{
- tx = session.beginTransaction();
- Student stu = new Student();
- stu.setName("lisi");
- stu.setAge(21);
- session.save(stu);
- tx.commit();
- }catch(Exception e){
- if (null!=tx){tx.rollback();}
- e.printStackTrace();
- }
- }
- }
- package cn.test;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import cn.Unit.HibernateUtils;
- import cn.domain.Student;
- public class Edit {
- public static void main(String[] args) {
- Session session = HibernateUtils.getSession();
- Transaction tx = null;
- try{
- tx = session.beginTransaction();
- //把id为2的 姓名 zhangsan改为wangwu 年龄 20改为30
- Student stu = (Student)session.get(Student.class,new Integer(1));
- stu.setName("wangwu");
- stu.setAge(30);
- session.update(stu);
- tx.commit();
- }catch(Exception e){
- if (null!=tx){tx.rollback();}
- e.printStackTrace();
- }
- }
- }
(3)查询
- package cn.test;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import cn.Unit.HibernateUtils;
- import cn.domain.Student;
- public class FindById {
- public static void main(String[] args) {
- Session session = HibernateUtils.getSession();
- Transaction tx = null;
- try{
- tx = session.beginTransaction();
- //查找id为2的学生信息,并输出在控制台
- Student stu = (Student)session.get(Student.class,new Integer(2));
- System.out.println("姓名:"+stu.getName());
- System.out.println("年龄:"+stu.getAge());
- tx.commit();
- }catch(Exception e){
- if (null!=tx){tx.rollback();}
- e.printStackTrace();
- }
- }
- }
(4)删除
- package cn.test;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import cn.Unit.HibernateUtils;
- import cn.domain.Student;
- public class Delete {
- public static void main(String[] args) {
- Session session = HibernateUtils.getSession();
- Transaction tx = null;
- tx = session.beginTransaction();
- //删除id为2的学生
- Student stu = (Student)session.get(Student.class,new Integer(2));
- session.delete(stu);
- tx.commit();
- }
- }