铜山区建设局招投标网站,网站建设规划设计报告,外贸手机网站建设,wordpress菜鸟目录
一、SessionFactory 接口
1、初始化hibernate
2、获取SessionFactory实例
3、创建获取Session
4、关闭Session和SessionFactory
最终配置
二、Session 接口
1、get()方法和load()方法#xff1a; 2、查询
3、保存 4、删除 5、更新
6、一个完整的DAO接口实现类 …目录
一、SessionFactory 接口
1、初始化hibernate
2、获取SessionFactory实例
3、创建获取Session
4、关闭Session和SessionFactory
最终配置
二、Session 接口
1、get()方法和load()方法 2、查询
3、保存 4、删除 5、更新
6、一个完整的DAO接口实现类
三、Transaction事务管理 具体代码结构
四、参考文章 一、SessionFactory 接口 SessionFactory是生成Session的工厂构造 SessionFactory 很消耗资源一般情况下一个应用中只初始化一个 SessionFactory 对象。 1、初始化hibernate 先声明SessionFactory private static SessionFactory sessionFactory; hibernate4.3之前的初始化方式 Configuration cfg new Configuration().configure();
//读取配置文件
StandardServiceRegistry serviceRegistry new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
//创建服务注册对象
sessionFactory cfg.buildSessionFactory(serviceRegistry);
//创建会话工厂对象SessionFactory hibernate4.3之后的初始化方式 ServiceRegistry serviceRegistry new StandardServiceRegistryBuilder().configure(/hibernate.cfg.xml).build();
//读取配置文件
sessionFactory new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
//创建会话工厂对象 2、获取SessionFactory实例 // 获得SessionFactory的实例public static SessionFactory getsSessionFactory() {return sessionFactory;}
3、创建获取Session // 获得ThreadLocal对象管理的Sessionpublic static Session getSession() throws HibernateException {Session session (Session) threadLocal.get();if (session null || !session.isOpen()) {if (sessionFactory null) {rebuildSessionFactory();}// 通过SessionFactory对象创建Session对象session (sessionFactory ! null) ? sessionFactory.openSession() : null;// 将Session对象保存到线程局部变量threadLocal中threadLocal.set(session);}return session;}
4、关闭Session和SessionFactory // 关闭Session实例public static void closeSession() {// 从线程局部变量threadLocal中获取之前存入的Session实例Session session (Session) threadLocal.get();threadLocal.set(null);if (session ! null) {session.close();}} // 关闭缓存和连接池public static void shutdown() {getsSessionFactory().close();}
最终配置
package com.utils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class LanUtils {private static SessionFactory sessionFactory;private static final ThreadLocalSession threadLocal new ThreadLocalSession();// 创建线程局部变量threadLocal用来保存Hibernate的Sessionstatic { // 使用静态代码块初始化Hibernatetry {ServiceRegistry serviceRegistry new StandardServiceRegistryBuilder().configure(/hibernate.cfg.xml).build();//读取配置文件sessionFactory new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();//创建会话工厂对象} catch (Throwable ex) {throw new ExceptionInInitializerError(ex);}}// 获得SessionFactory的实例public static SessionFactory getsSessionFactory() {return sessionFactory;}// 获得ThreadLocal对象管理的Sessionpublic static Session getSession() throws HibernateException {Session session (Session) threadLocal.get();if (session null || !session.isOpen()) {if (sessionFactory null) {rebuildSessionFactory();}// 通过SessionFactory对象创建Session对象session (sessionFactory ! null) ? sessionFactory.openSession() : null;// 将Session对象保存到线程局部变量threadLocal中threadLocal.set(session);}return session;}// 关闭Session实例public static void closeSession() {// 从线程局部变量threadLocal中获取之前存入的Session实例Session session (Session) threadLocal.get();threadLocal.set(null);if (session ! null) {session.close();}}// 重建SessionFactorypublic static void rebuildSessionFactory() {Configuration configuration new Configuration(); configuration.configure(/hibernate.cfg.xml);StandardServiceRegistry serviceRegistry new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();sessionFactory configuration.buildSessionFactory(serviceRegistry);}// 关闭缓存和连接池public static void shutdown() {getsSessionFactory().close();}
}二、Session 接口 Session 是应用程序与数据库之间交互操作的一个单线程对象生命周期很短是 Hibernate 运作的中心所有持久化对象必须在 session 的管理下才可以进行持久化操作。 Session 接口是 Hibernate 向应用程序提供的操作数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法。 Session可能处于以下三种状态 临时状态transient: 不曾进行持久化未与任何Session相关联新建的对象。 持久化状态persistent: 仅与一个Session相关联从数据库读数据。 脱管状态detached: 已经进行过持久化但当前未与任何Session相关联数据库内未读的数据。 1、get()方法和load()方法 二者区别 当数据库中不存在与OID对应的记录时load()方法抛出ObjectNotFoundException异常而get()方法返回为NULL。 load方法采用配置的加载策略(默认为延迟加载)而get()方法则会忽略配置总是采用立即加载方法。 Session接口提供了4个重载的get方法和重载的load()方法分别通过“持久类主键”和“全类名主键”以及“锁选项”来获取实体对象。 public Object get(Class clazz, Serializable id);
public Object get(Class clazz, Serializable id, LockOptions lockOptions);public Object get(String entityName, Serializable id);
public Object get(String entityName, Serializable id, LockOptions lockOptions);Object load(String entityName, Serializable id, LockOptions lockOptions);2、查询 Query createQuery(String hql)方法 根据hql的查询语法查询表的内容返回值为Query。 实例
public ListUser findByHQL(String hql) {ListUser list new ArrayList();Session session HibernateUtil.getsSession();list session.createQuery(hql).list();//list()方法将上面方法返回的Query对象转换成List对象。session.close();return list;}
3、保存 Session接口提供save()方法将会将临时对象保存在Session缓存中使其进入持久化再选用映射文件指定的标识符生成器为持久化对象分配唯一的ID最后会计划执行一个insert语句将缓存内的对象存入数据库其需要事务管理。 实例 Overridepublic void save(User user) {// 创建Session实例Session session HibernateUtil.getsSession();// 创建Transaction实例相当于事务Transaction tx session.beginTransaction();try {// 使用Session的save方法将持久化对象保存到数据库session.save(user);// 提交事务tx.commit();} catch (Exception e) {e.printStackTrace();// 出现异常回滚事务tx.rollback();} finally {// 关闭Session连接HibernateUtil.closeSession();}} 4、删除 Session的delete()方法用于从数据库中删除一个java对象其需要事务管理。delete()方法既可以删除持久化对象也可以删除脱管对象。其处理过程如下 (1)如果传入的参数是脱管对象则先使脱管对象与Session关联使它变为持久化对象。如果参数是持久化对象则忽略该步。 (2)计划执行一个delete语句。 (3)把对象从Session缓存中删除该对象进入删除状态。 实例 public void delete(User user) {Session session HibernateUtil.getsSession();Transaction tx session.beginTransaction();//事务开始try {session.delete(user);tx.commit();//提交事务} catch (Exception e) {e.printStackTrace();tx.rollback();//回滚} finally {HibernateUtil.closeSession();}} 5、更新 Session的update()方法使一个脱管对象转变为持久化对象其需要事务管理。它完成以下操作 先将脱管对象加入到Session缓存中使其转变为持久化对象再计划执行一个update语句将缓存内的对象与数据库同步。 实例 Overridepublic void update(User user) {Session session HibernateUtil.getsSession();Transaction tx session.beginTransaction();try {session.update(user);tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();} finally {HibernateUtil.closeSession();}}
}
6、一个完整的DAO接口实现类
package org.hibernate.dao;import java.util.ArrayList;
import java.util.List;import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.entity.HibernateUtil;
import org.hibernate.entity.User;public class UserDAOImpl implements UserDAO {// 添加用户需要事务管理Overridepublic void save(User user) {// 创建Session实例Session session HibernateUtil.getsSession();// 创建Transaction实例Transaction tx session.beginTransaction();try {// 使用Session的save方法将持久化对象保存到数据库session.save(user);// 提交事务tx.commit();} catch (Exception e) {e.printStackTrace();// 出现异常回滚事务tx.rollback();} finally {// 关闭Session连接HibernateUtil.closeSession();}}// 根据id查找用户 ,可以不需要事务管理 Get方式Overridepublic User findByIdGet(int id) {User user null;Session session HibernateUtil.getsSession();// 使用session的get方法获取指定id的用户user (User) session.get(User.class, id);if (user null || .equals(user)) {System.out.println(查询id为 id 无结果....);}session.close();return user;}// 根据id查找用户 ,可以不需要事务管理 Load方式Overridepublic User findByIdLoad(int id) {User user null;Session session HibernateUtil.getsSession();// 使用session的方法获取指定id的用户user (User) session.load(User.class, id);if (user null || .equals(user)) {System.out.println(查询id为 id 无结果....);}session.close();return user;}// 根据HQl语句查询Overridepublic ListUser findByHQL(String hql) {ListUser list new ArrayList();Session session HibernateUtil.getsSession();list session.createQuery(hql).list();session.close();return list;}// 删除用户 ,需要事务管理Overridepublic void delete(User user) {Session session HibernateUtil.getsSession();Transaction tx session.beginTransaction();try {session.delete(user);tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();} finally {HibernateUtil.closeSession();}}// 修改用户Overridepublic void update(User user) {Session session HibernateUtil.getsSession();Transaction tx session.beginTransaction();try {session.update(user);tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();} finally {HibernateUtil.closeSession();}}
}
三、Transaction事务管理 Transaction对象用于管理对数据库的事务操作。通过Transaction对象可以控制和管理一系列数据库操作确保它们作为一个原子操作进行执行以确保数据的一致性和完整性。 其中插入保存、删除、更新操作需要事务进行管理。 具体代码结构
// 获取当前线程绑定的Session
Session session HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx session.beginTransaction();try {// 执行数据库操作增删改查// 提交事务tx.commit();
} catch (Exception e) {// 发生异常时回滚事务if (tx ! null) {tx.rollback();}
} finally {// 关闭Sessionsession.close();
}
四、参考文章
Hibernate——配置并访问数据库 - 真的是从入门开始 - 博客园 (cnblogs.com)
hibernate中的session用法_list是hibernate中session的方法-CSDN博客