最近一直在做系统测试,检验功能,测试bug。发现一直都是用spring来管理配置hibernate依赖注入,来管理Hibernate事务。但是有的程序需要手动Main函数启动,而采用spring加载的话,就会触发很多类,影响性能,还有当spring里面写了触发器后,那么随着你的main函数运行,你的触发器也得到了启动,那么这个会造成多个进程开启了触发器。
当离开了spring管理时,发现Hibernate居然不知道怎么调用了,参考了网上一些大牛的文章,自己动手实现了,无需spring管理来进行Hibernate调用。
直接上代码:1.工具类,2.xml配置文件,3.实体类,注释方式 4.测试功能类
package com.t.common.hibernate; import java.io.Serializable; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public final class HibernateUtil { private static SessionFactory sessionFactory; private static ThreadLocal session = new ThreadLocal(); public HibernateUtil(){ } static { Configuration cfg = new Configuration(); cfg.configure("hibernate.common.xml"); sessionFactory = cfg.buildSessionFactory(); } public static Session getThreadLocalSession(){ Session s = (Session) session.get(); if(s==null){ s=getSession(); session.set(s); } return s; } public static void closeSession(){ Session s = (Session)session.get(); if(s!=null){ s.close(); session.set(null); } } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ return sessionFactory.openSession(); } //增删改查 //当需要事务一致性的时候,需要回滚,比如商品系统 /* * public static void add(Object entity){ Session s =null; Transaction tx = null; try { s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.save(entity); tx.commit(); } catch (HibernateException e) { if(tx != null){ tx.rollback(); } throw e; }finally { if(s!=null){ s.close(); } } } */ public static void add(Object entity){ Session s =null; Transaction tx = null; try { s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.save(entity); tx.commit(); } finally { if(s!=null){ s.close(); } } } public static void delete(Object entity){ Session s =null; Transaction tx = null; try { s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.delete(entity); tx.commit(); } finally { if(s!=null){ s.close(); } } } public static Object get(Class clazz, Serializable id){ Session s =null; try { s = HibernateUtil.getSession(); Object obj = s.get(clazz, id); return obj; } finally { if(s!=null){ s.close(); } } } }
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer"> false </property> <property name="hibernate.connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <property name="connection.username">baike</property> <property name="connection.password">baike</property> <property name="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect </property> <property name="hibernate.search.autoregister_listeners"> false </property> <property name="hibernate.show_sql">true</property> <!-- 映射类 --> <mapping class="com.t.common.hibernate.BaikeUser"/> </session-factory> </hibernate-configuration>
package com.t.common.hibernate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity @Table(name="T_USER") public class BaikeUser { private Long id ; private String username; private String password; @Id @SequenceGenerator(name="generator",allocationSize=1,initialValue=1,sequenceName="SEQ_USER_ID") @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="generator") @Column(name="ID") public Long getId() { return id; } @Column(name="username") public String getUsername() { return username; } @Column(name="password") public String getPassword() { return password; } public void setId(Long id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } }
package com.t.common.hibernate; public class TestUSer { public static void main(String[] args) { BaikeUser user = new BaikeUser(); user.setId(1L); user.setUsername("cjp1989"); user.setPassword("12345"); HibernateUtil.add(user); } }
1.注意事项:xml配置文件可以自定义的,但是<session-factory> 单独使用时,没有name属性
相关推荐
本文将深入探讨如何将Spring与Hibernate进行集成,并重点介绍声明式事务的配置与使用。 Spring框架是一个全面的企业级应用开发框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java应用的复杂性。另...
它们各自负责不同的职责:Struts2用于控制应用程序的流程,Hibernate3则是优秀的对象关系映射(ORM)框架,Spring则提供全面的依赖注入(DI)和面向切面编程(AOP)功能,以及事务管理等企业级服务。将这三个框架...
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
Struts在表现层提供MVC(Model-View-Controller)架构,Hibernate处理持久层对象与数据库之间的交互,而Spring则是一个全面的后端解决方案,涵盖了依赖注入、AOP(面向切面编程)、事务管理等多个方面。这三者结合...
在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
总的来说,Spring 3和Hibernate 4结合使用声明式事务管理,使得我们无需在代码中显式调用事务开始、提交和回滚,而是通过注解和配置文件来声明事务的边界和行为。这种方式降低了代码的复杂度,提高了可维护性和可...
3. **Spring与Hibernate的集成**:Spring提供了HibernateTemplate或SessionFactoryBean,使得开发者能够方便地进行数据库操作,同时Spring的事务管理可以协调这些操作。 4. **配置文件的整合**:Struts的struts-...
Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...
本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...
在整合中,Spring通常被用来管理Hibernate的SessionFactory和Transaction,以实现声明式事务管理。 在实际的项目配置中,开发者需要确保所有依赖的jar包版本匹配,并正确地配置Struts2的配置文件(struts.xml)、...
Hibernate支持实体类、配置文件、Session工厂、Session、事务管理等核心概念,通过HQL(Hibernate查询语言)或 Criteria API 提供查询功能,极大地提高了开发效率。 **Struts2** 是一个基于MVC(Model-View-...
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml...这两个项目下来,关于spring事务这一块基本上明了,绝对对得起这个分数
本教程将深入探讨如何在Spring框架中利用`TransactionInterceptor`进行声明式事务管理,与Hibernate集成实现高效的数据库事务控制。 首先,了解事务管理是至关重要的。事务是一组数据库操作,这些操作要么全部成功...
在Spring配置文件中配置SessionFactory,使用Hibernate的LocalSessionFactoryBean。然后,为Service层的Bean声明事务管理,确保数据操作的原子性。 - **配置Struts2** 在Struts2的配置文件中,定义Action类,指定...
- **配置Spring**:设置Spring的核心配置,包括Bean定义,数据源,事务管理器,以及Hibernate的SessionFactory。 - **配置Hibernate**:配置Hibernate的SessionFactory,实体类的映射文件,以及数据源。 - **使用...
Spring 3.0.4 是一个全面的后端开发框架,涵盖了依赖注入、面向切面编程(AOP)、数据访问、事务管理等多个方面。在这个项目中,Spring 可能被用来管理 Struts 2 的Action实例,提供服务层和持久层的抽象,并实现...
此外,Spring还提供了数据访问抽象,包括JDBC模板和对ORM框架(如Hibernate)的支持,以及事务管理、Web MVC框架等功能。在2.5版本中,Spring引入了更多新特性,如支持JSR-303 Bean Validation、改进的类型安全的...
`aspectjweaver-1.6.9.jar`是AspectJ库的一部分,用于支持AOP编程,使得开发者可以在Hibernate中实现事务管理和其他切面逻辑。 Struts2是一个基于MVC设计模式的Web应用框架,它在Struts1的基础上进行了许多改进,...