`
cjp1989
  • 浏览: 162510 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

纯Hibernate使用-不用spring事务管理

阅读更多

     最近一直在做系统测试,检验功能,测试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属性

 

 

 

 

3
2
分享到:
评论
5 楼 cjp1989 2013-08-01  
zh_harry 写道
kentkwan 写道
这。。。。。。

好流B啊

因为特殊需要
4 楼 cjp1989 2013-08-01  
ct198312_163.com 写道
兄弟,你这种写法的话事务是完全以硬编码的方式进行控制的。
之所以使用spring来管理数据库事务,是因为方便,不需要写那么多的commit,会根据配置判断是方法是否需要使用事务。

嗯,有spring是比较方便
3 楼 ct198312_163.com 2013-08-01  
兄弟,你这种写法的话事务是完全以硬编码的方式进行控制的。
之所以使用spring来管理数据库事务,是因为方便,不需要写那么多的commit,会根据配置判断是方法是否需要使用事务。
2 楼 zh_harry 2013-07-31  
kentkwan 写道
这。。。。。。

好流B啊
1 楼 kentkwan 2013-07-31  
这。。。。。。

相关推荐

    Spring与Hibernate集成---声明式事务

    本文将深入探讨如何将Spring与Hibernate进行集成,并重点介绍声明式事务的配置与使用。 Spring框架是一个全面的企业级应用开发框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java应用的复杂性。另...

    struts2-hibernate3-spring整合需要的全部jar包

    它们各自负责不同的职责:Struts2用于控制应用程序的流程,Hibernate3则是优秀的对象关系映射(ORM)框架,Spring则提供全面的依赖注入(DI)和面向切面编程(AOP)功能,以及事务管理等企业级服务。将这三个框架...

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    Struts-Hibernate-Spring推荐的最优组合配置

    Struts在表现层提供MVC(Model-View-Controller)架构,Hibernate处理持久层对象与数据库之间的交互,而Spring则是一个全面的后端解决方案,涵盖了依赖注入、AOP(面向切面编程)、事务管理等多个方面。这三者结合...

    spring hibernate 事务管理学习笔记(一)

    在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...

    Hibernate缓存与spring事务详解

    **标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...

    spring3,hibernate4 配置声明式事务管理(annotation方式)

    总的来说,Spring 3和Hibernate 4结合使用声明式事务管理,使得我们无需在代码中显式调用事务开始、提交和回滚,而是通过注解和配置文件来声明事务的边界和行为。这种方式降低了代码的复杂度,提高了可维护性和可...

    hibernate2.5-struts1-spring3-yar

    3. **Spring与Hibernate的集成**:Spring提供了HibernateTemplate或SessionFactoryBean,使得开发者能够方便地进行数据库操作,同时Spring的事务管理可以协调这些操作。 4. **配置文件的整合**:Struts的struts-...

    Spring2.5和Hibernate3集成--学习spring aop ioc

    Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...

    spring mvc+hibernate实现事务管理(配置文件版)

    本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...

    最新版Hibernate-struts-spring框架整合.pdf

    在整合中,Spring通常被用来管理Hibernate的SessionFactory和Transaction,以实现声明式事务管理。 在实际的项目配置中,开发者需要确保所有依赖的jar包版本匹配,并正确地配置Struts2的配置文件(struts.xml)、...

    JavaWeb-Hibernate-Struts2-Spring2

    Hibernate支持实体类、配置文件、Session工厂、Session、事务管理等核心概念,通过HQL(Hibernate查询语言)或 Criteria API 提供查询功能,极大地提高了开发效率。 **Struts2** 是一个基于MVC(Model-View-...

    spring hibernate,spring jdbc事务管理

    两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml...这两个项目下来,关于spring事务这一块基本上明了,绝对对得起这个分数

    Spring Hibernate事务实例

    本教程将深入探讨如何在Spring框架中利用`TransactionInterceptor`进行声明式事务管理,与Hibernate集成实现高效的数据库事务控制。 首先,了解事务管理是至关重要的。事务是一组数据库操作,这些操作要么全部成功...

    Struts2.0-Hibernate3.2-Spring2.0整合.doc

    在Spring配置文件中配置SessionFactory,使用Hibernate的LocalSessionFactoryBean。然后,为Service层的Bean声明事务管理,确保数据操作的原子性。 - **配置Struts2** 在Struts2的配置文件中,定义Action类,指定...

    springmvc-spring4.3-hibernate5框架整合

    - **配置Spring**:设置Spring的核心配置,包括Bean定义,数据源,事务管理器,以及Hibernate的SessionFactory。 - **配置Hibernate**:配置Hibernate的SessionFactory,实体类的映射文件,以及数据源。 - **使用...

    struts-2.2.1 spring-3.0.4 hibernate-3.6.0 JPA整合

    Spring 3.0.4 是一个全面的后端开发框架,涵盖了依赖注入、面向切面编程(AOP)、数据访问、事务管理等多个方面。在这个项目中,Spring 可能被用来管理 Struts 2 的Action实例,提供服务层和持久层的抽象,并实现...

    struts2-hibernate3.3.5-spring2.5整合包

    此外,Spring还提供了数据访问抽象,包括JDBC模板和对ORM框架(如Hibernate)的支持,以及事务管理、Web MVC框架等功能。在2.5版本中,Spring引入了更多新特性,如支持JSR-303 Bean Validation、改进的类型安全的...

    spring3.2+ Hibernate 3.5.4-Final+struts2 整合开发jar包

    `aspectjweaver-1.6.9.jar`是AspectJ库的一部分,用于支持AOP编程,使得开发者可以在Hibernate中实现事务管理和其他切面逻辑。 Struts2是一个基于MVC设计模式的Web应用框架,它在Struts1的基础上进行了许多改进,...

Global site tag (gtag.js) - Google Analytics