• 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 }
  • 相关阅读:
    day22 sys模块(☆☆☆)json & pickle模块(☆☆☆☆)
    day22 OS模块
    day21 time时间模块
    day21 if __name__==""__main__""的用法
    day21 模块
    day20 装饰器 (装饰器=高阶函数+函数嵌套+闭包)加上参数
    day19 生产者模型-next与send用法详解-生产者消费者模型
    day19 生成器函数的好处
    zzq's sort [思维题]
    三元组 [01Trie]
  • 原文地址:https://www.cnblogs.com/sharpest/p/6045470.html
Copyright © 2020-2023  润新知