Hibernate初始化创建SessionFactory,Session,关闭SessonFactory,session

1.hibernate.cfg.xml

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7         <property name="dialect">
 8             org.hibernate.dialect.MySQLDialect</property>        <!-- 数据库方言 -->
 9         <property name="connection.url">
10             jdbc:mysql://localhost:3306/db_examsystem</property><!-- 数据库连接URL -->
11         <property name="connection.username">root</property>    <!-- 数据库用户名 -->
12         <property name="connection.password">123456</property>    <!-- 数据库用户密码 -->
13         <property name="connection.driver_class">                <!-- 数据库驱动类 -->
14             com.mysql.jdbc.Driver</property>
15         <mapping resource="com/sanqing/po/Student.hbm.xml"/>
16         <mapping resource="com/sanqing/po/Teacher.hbm.xml"/>
17         <mapping resource="com/sanqing/po/Subject.hbm.xml"/>    
18     </session-factory>
19 </hibernate-configuration>

2.hibernateSessionFactory类

 1 package com.sanqing.hibernate;
 2 
 3 import org.hibernate.HibernateException;
 4 import org.hibernate.Session;
 5 import org.hibernate.cfg.Configuration;
 6 import org.junit.Test;
 7 
 8 public class HibernateSessionFactory {
 9     private static String CONFIG_FILE_LOCATION 
10                     = "/hibernate.cfg.xml";                    //指定配置文件路径
11     private static final ThreadLocal<Session> threadLocal 
12                     = new ThreadLocal<Session>();            //定义ThreadLocal对象
13     private  static Configuration configuration 
14                     = new Configuration();                    //定义Configuration对象
15     private static org.hibernate.SessionFactory sessionFactory;//定义SessionFactory对象
16     private static String configFile = CONFIG_FILE_LOCATION;
17     static {
18         try {
19             configuration.configure(configFile);//读取配置文件
20             sessionFactory = 
21                 configuration.buildSessionFactory();//根据配置文件创建SessionFactory对象
22         } catch (Exception e) {
23             System.err
24                     .println("%%%% Error Creating SessionFactory %%%%");
25             e.printStackTrace();
26         }
27     }
28     private HibernateSessionFactory() {
29     }
30     public static Session getSession() throws HibernateException {
31         Session session = (Session) threadLocal.get();//从ThreadLocal对象中获得Session对象
32         if (session == null || !session.isOpen()) {//判断获得的Session对象是否为空或者未打开
33             if (sessionFactory == null) {//如果没有创建SessionFactory对象,则首先创建
34 //                rebuildSessionFactory();
35             }
36             //如果SessionFactory对象不为空,则调用其openSession方法创建Session对象
37             session = (sessionFactory != null) ? sessionFactory.openSession(): null;
38             threadLocal.set(session);//在ThreadLocal对象中保存该Session对象
39         }
40         return session;
41     }
42 //    public static void rebuildSessionFactory() {
43 //        try {
44 //            configuration.configure(configFile);//读取配置文件
45 //            sessionFactory = 
46 //                configuration.buildSessionFactory();//根据配置文件创建sessionFactory对象
47 //        } catch (Exception e) {
48 //            System.err
49 //                    .println("%%%% Error Creating SessionFactory %%%%");
50 //            e.printStackTrace();
51 //        }
52 //    }
53     public static void closeSession() throws HibernateException {
54         Session session = (Session) threadLocal.get();//从ThreadLocal对象中获得Session对象
55         threadLocal.set(null);//将当前线程Session对象从ThreadLocal对象中移除
56         if (session != null) {
57             session.close();
58         }
59     }
60     public static org.hibernate.SessionFactory getSessionFactory() {//取得SessionFactory对象
61         return sessionFactory;
62     }
63     public static void setConfigFile(String configFile) {//设置新的配置文件
64         HibernateSessionFactory.configFile = configFile;
65         sessionFactory = null;
66     }
67     public static Configuration getConfiguration() {//获得Configuration对象
68         return configuration;
69     }
70 }

3.student

 1 package com.sanqing.po;
 2 /*
 3  * 学生表,保存学生编号,系统密码
 4  */
 5 public class Student {
 6     private String studentID;
 7     private String password;
 8     private String studentName;
 9     private Integer result;
10     private String sclass;
11     public String getStudentID() {
12         return studentID;
13     }
14     public void setStudentID(String studentID) {
15         this.studentID = studentID;
16     }
17     public String getPassword() {
18         return password;
19     }
20     public void setPassword(String password) {
21         this.password = password;
22     }
23     public String getStudentName() {
24         return studentName;
25     }
26     public void setStudentName(String studentName) {
27         this.studentName = studentName;
28     }
29     public Integer getResult() {
30         return result;
31     }
32     public void setResult(Integer result) {
33         this.result = result;
34     }
35     public String getSclass() {
36         return sclass;
37     }
38     public void setSclass(String sclass) {
39         this.sclass = sclass;
40     }
41 }

4.student.hbm.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping 
 3             PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="com.sanqing.po.Student" table="tb_student"><!-- 每个class对应一个持久化对象 -->
 7         <id name="studentID" type="string"><!-- id元素用来定义主键标识,并指定主键生成策略 -->
 8             <generator class="assigned"></generator>
 9         </id>
10         <property name="password" type="string"></property><!-- 映射password属性 -->
11         <property name="studentName" type="string"></property><!-- 映射studentName属性 -->
12         <property name="result" type="int"></property><!-- 映射result属性 -->
13         <property name="sclass" type="string"></property><!-- 映射sclass属性 -->
14     </class>    
15 </hibernate-mapping>

5.studentDao

 1 package com.sanqing.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.sanqing.po.Student;
 6 
 7 public interface StudentDAO {
 8     public Student findByStudentID(String studentID);//查询方法,根据学生ID查询
 9     public void updateStudent(Student student);//更新学生信息
10     public List<Student> findByStudentName(String studentName);//根据学生姓名查找学生
11     public List<Student> findByStudentClass(String sclass);//根据班级查找学生
12 }

6.studentDaoImpl

 1 package com.sanqing.dao;
 2 
 3 import java.util.Iterator;
 4 import java.util.List;
 5 
 6 import org.hibernate.Query;
 7 import org.hibernate.Session;
 8 import org.hibernate.Transaction;
 9 
10 import com.sanqing.hibernate.HibernateSessionFactory;
11 import com.sanqing.po.Student;
12 import com.sanqing.po.Subject;
13 
14 public class StudentDAOImpl implements StudentDAO{
15     public Student findByStudentID(String studentID) {
16         Session session = HibernateSessionFactory.getSession();//获得Session对象
17         Student student = (Student) session.get(Student.class, studentID);
18         HibernateSessionFactory.closeSession();//关闭Session对象
19         return student;
20     }
21 
22     public void updateStudent(Student student) {
23         Session session = HibernateSessionFactory.getSession();//获得Session对象
24         Transaction  transaction = null;//声明一个事务对象
25         try{
26             transaction = session.beginTransaction();//开启事务
27             session.update(student);//更新学生信息
28             transaction.commit();//提交事务
29         }catch(Exception ex) {
30             ex.printStackTrace();
31             transaction.rollback();//事务回滚
32         }
33         HibernateSessionFactory.closeSession();//关闭Session对象
34     }
35 
36     public List<Student> findByStudentName(String studentName) {
37         Session session = HibernateSessionFactory.getSession();//获得Session对象
38         Query query = session.createQuery("from Student as stu where stu.studentName = ?");
39         query.setString(0, studentName);
40         List list = query.list();                    //查询结果保存到list中
41         HibernateSessionFactory.closeSession();        //关闭Session对象
42         return list;
43     }
44 
45     public List<Student> findByStudentClass(String sclass) {
46         Session session = HibernateSessionFactory.getSession();//获得Session对象
47         Query query = session.createQuery("from Student as stu where stu.sclass = ?");
48         query.setString(0, sclass);
49         List list = query.list();                    //查询结果保存到list中
50         HibernateSessionFactory.closeSession();        //关闭Session对象
51         return list;
52     }
53 }
 1 package com.sanqing.dao;
 2 
 3 import java.util.Iterator;
 4 import java.util.List;
 5 
 6 import org.hibernate.Query;
 7 import org.hibernate.Session;
 8 import org.hibernate.Transaction;
 9 
10 import com.sanqing.hibernate.HibernateSessionFactory;
11 import com.sanqing.po.Student;
12 import com.sanqing.po.Subject;
13 
14 public class StudentDAOImpl implements StudentDAO{
15     public Student findByStudentID(String studentID) {
16         Session session = HibernateSessionFactory.getSession();//获得Session对象
17         Student student = (Student) session.get(Student.class, studentID);
18         HibernateSessionFactory.closeSession();//关闭Session对象
19         return student;
20     }
21 
22     public void updateStudent(Student student) {
23         Session session = HibernateSessionFactory.getSession();//获得Session对象
24         Transaction  transaction = null;//声明一个事务对象
25         try{
26             transaction = session.beginTransaction();//开启事务
27             session.update(student);//更新学生信息
28             transaction.commit();//提交事务
29         }catch(Exception ex) {
30             ex.printStackTrace();
31             transaction.rollback();//事务回滚
32         }
33         HibernateSessionFactory.closeSession();//关闭Session对象
34     }
35 
36     public List<Student> findByStudentName(String studentName) {
37         Session session = HibernateSessionFactory.getSession();//获得Session对象
38         Query query = session.createQuery("from Student as stu where stu.studentName = ?");
39         query.setString(0, studentName);
40         List list = query.list();                    //查询结果保存到list中
41         HibernateSessionFactory.closeSession();        //关闭Session对象
42         return list;
43     }
44 
45     public List<Student> findByStudentClass(String sclass) {
46         Session session = HibernateSessionFactory.getSession();//获得Session对象
47         Query query = session.createQuery("from Student as stu where stu.sclass = ?");
48         query.setString(0, sclass);
49         List list = query.list();                    //查询结果保存到list中
50         HibernateSessionFactory.closeSession();        //关闭Session对象
51         return list;
52     }
53 }
原文地址:https://www.cnblogs.com/sharpest/p/6045470.html