- 浏览: 455681 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
=======在没有使用Spring声明式事物前,使用Hibernate手动事务管理========
1、getCurrentSession()和openSession()的区别?
* 采用getCurrentSession()方法创建的session会绑定到当前线程中
而采用openSession()方法创建的session不会绑定到当前线程中
* 采用getCurrentSession()创建的session会在commit或rollback后自动关闭而采用openSession()方法创建的session必须手动关闭
2、使用getCurrentSession()必须在hibernate.cfg.xml文件中进行配置:
* 如果采用的是本地事务(JDBC事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用的是全局事务(JTA事务)
<property name="hibernate.current_session_context_class">jta</property>
代码如下:
添加一个用户然后,在同一个事务范围内记录日志,如果不成功则回滚!
1.模型部分
映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.wlh.hibernate.model.Log" table="t_log">
<id name="id" >
<generator class="native"/>
</id>
<property name="type"/>
<property name="details"/>
<property name="date"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.wlh.hibernate.model.User" table="t_user">
<id name="id" >
<generator class="native"/>
</id>
<property name="username"/>
</class>
</hibernate-mapping>
2.业务逻辑层接口
3.业务逻辑层接口实现
4.客户端调用
5.结果输出
Hibernate:
insert
into
t_user
(username)
values
(?)
Hibernate:
insert
into
t_log
(type, details, date)
values
(?, ?, ?)
1、getCurrentSession()和openSession()的区别?
* 采用getCurrentSession()方法创建的session会绑定到当前线程中
而采用openSession()方法创建的session不会绑定到当前线程中
* 采用getCurrentSession()创建的session会在commit或rollback后自动关闭而采用openSession()方法创建的session必须手动关闭
2、使用getCurrentSession()必须在hibernate.cfg.xml文件中进行配置:
* 如果采用的是本地事务(JDBC事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用的是全局事务(JTA事务)
<property name="hibernate.current_session_context_class">jta</property>
代码如下:
添加一个用户然后,在同一个事务范围内记录日志,如果不成功则回滚!
1.模型部分
package com.wlh.hibernate.model; import java.util.Date; //日志 public class Log { private int id; private String type; private String details; private Date date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } package com.wlh.hibernate.model; //用户 public class User { private int id; private String username; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.wlh.hibernate.model.Log" table="t_log">
<id name="id" >
<generator class="native"/>
</id>
<property name="type"/>
<property name="details"/>
<property name="date"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.wlh.hibernate.model.User" table="t_user">
<id name="id" >
<generator class="native"/>
</id>
<property name="username"/>
</class>
</hibernate-mapping>
2.业务逻辑层接口
package com.wlh.hibernate.manager; import com.wlh.hibernate.model.Log; //日志管理 public interface LogManager { public void addLog(Log log); } package com.wlh.hibernate.manager; import com.wlh.hibernate.model.User; //用户管理 public interface UserManager { public void addUser(User user); }
3.业务逻辑层接口实现
package com.wlh.hibernate.manager.impl; import com.wlh.hibernate.manager.LogManager; import com.wlh.hibernate.model.Log; import com.wlh.hibernate.utils.HibernateUtils; public class LogManagerImpl implements LogManager { public void addLog( Log log) { HibernateUtils.getFactory().getCurrentSession().save(log); } } package com.wlh.hibernate.manager.impl; import java.util.Date; import org.hibernate.Session; import org.hibernate.Transaction; import com.wlh.hibernate.manager.LogManager; import com.wlh.hibernate.manager.UserManager; import com.wlh.hibernate.model.Log; import com.wlh.hibernate.model.User; import com.wlh.hibernate.utils.HibernateUtils; public class UserManagerImpl implements UserManager { Session session=null; Transaction tx=null; public void addUser(User user) { try{ //得到当前一个session然后放到threadLocale中,在事务关闭之前可以在项目的任何地方, //使用sessionFactory.getCurrentSession()得到该Session,不需要传递 session= HibernateUtils.getFactory().getCurrentSession(); tx=session.beginTransaction(); session.save(user); Log log=new Log(); log.setDate(new Date()); log.setDetails("XXXX做了什么XXXX"); log.setType("操作日志"); LogManager logManager=new LogManagerImpl(); logManager.addLog(log); //出现异常,事务自动回滚,数据库没有添加记录 //Integer.parseInt("dfjdkfhdjhjfd"); tx.commit(); }catch(Exception e){ e.printStackTrace(); tx.rollback(); } } }
4.客户端调用
package com.wlh.hibernate; import com.wlh.hibernate.manager.UserManager; import com.wlh.hibernate.manager.impl.UserManagerImpl; import com.wlh.hibernate.model.User; public class Client { public static void main(String []args){ UserManager userManager= new UserManagerImpl(); User user=new User(); user.setUsername("wlh"); userManager.addUser(user); } }
5.结果输出
Hibernate:
insert
into
t_user
(username)
values
(?)
Hibernate:
insert
into
t_log
(type, details, date)
values
(?, ?, ?)
- hibernate_spring1.rar (22.3 KB)
- 下载次数: 32
发表评论
-
java开发实战视频详解
2017-07-02 08:09 510java开发实战视频详解 链接: http://pan.bai ... -
Spring定时任务
2010-07-15 13:12 11451.配置文件:ScheduledTimerTask是sprin ... -
Spring(十七) Spring 拦截器
2009-02-18 00:44 2668该例子结合Spring(十六)这篇文章来看,本人觉得其实Spr ... -
Spring(十六) AOP(五)--和AOP(二)类似的切面编程
2009-02-17 23:06 1351.实现aop的例子 1.首先先来点预备类,咱定义一个表演的 ... -
Spring(十五)的监听器ContextLoaderListener的作用
2009-02-07 20:39 4786在SSH项目中我们自动加 ... -
Spring(十三) Spring中事务的传播属性详解
2009-02-06 17:32 1192Spring中事务的传播属性详解 在使用Spring时,大部 ... -
Spring(十四) Spring和Hibernate的结合--声明式事务管理
2009-02-06 16:23 3483采用声明式事务 1、声明式事务配置 * 配置SessionF ... -
Spring(十一) AOP(四)spring面向切面编程--JDK代理和CGLIB代理
2009-02-05 16:56 2118spring对AOP的支持 1、如果目标对象实现了接口,默认 ... -
Spring(十) AOP(三)spring面向切面编程--Aspect类的Advice方法接收参数
2009-02-05 14:57 2443spring对AOP的支持 Aspect类默认情况下不需要实 ... -
Spring(九) AOP(二)spring面向切面编程--采用静态配置文件的方式
2009-02-05 14:24 1652Spring对AOP的支持(采用 ... -
Spring(八) AOP(一)spring面向切面编程--注解方式的面向切面编程
2009-02-05 11:14 1809注解方式的面向切面编程 spring对AOP的支持(采用Ann ... -
Spring(七)根据类型自动装配
2009-02-04 12:18 1005根据类型自动装配 将Beans标签的default-autow ... -
Spring(六)根据名称自动装配
2009-02-04 12:06 1057根据类型自动装配 设置Beans标签default-auto ... -
Spring(五)作用域
2009-02-04 11:29 1078spring bean的作用域 scope可以值: * ... -
Spring(四)属性编辑器&注入(Injection)
2009-02-04 11:15 13361、spring普通属性注入 参见spring文档3.3.3 ... -
Spring(三)如何创建一个spring项目
2009-02-03 19:25 19511、spring依赖库 * SPRING_HOME/dist ... -
Spring(二)编辑XML文件的输入提示功能的配置
2009-02-03 11:52 11661.windows---preferences---输入xml ... -
Spring(一)为什么要使用spring
2009-02-03 11:12 1955使用Spring可以避免factory和siglton的泛滥 ...
相关推荐
在Spring中,我们可以使用HibernateTemplate或SessionFactoryBean来配置和管理Hibernate。同样,Spring的声明式事务管理也可以应用到Hibernate上,只需将@Transactional注解添加到使用Hibernate的方法上,Spring就会...
声明式事务管理只需在配置文件中指定哪些方法需要在事务中执行,而编程式事务管理则需要在代码中手动开启和提交事务。Spring支持JDBC、Hibernate等多种数据访问技术的事务管理,提供了一致的API。 整合过程: 1. *...
编程式事务管理需要开发者手动编写事务开始、提交和回滚的代码,而声明式事务管理则通过配置来定义事务边界,更易于维护和使用。 Spring的`TransactionInterceptor`是声明式事务管理的一部分,它基于AOP来处理事务...
你可以参考这个博客链接(https://microjava.iteye.com/blog/525973),结合实际项目,逐步掌握Spring和Hibernate整合的事务管理技巧。 总之,Spring与Hibernate的整合使得Java应用的事务管理变得更加高效和便捷。...
4. 支持事务:Hibernate内置了事务管理,可以无缝地与Java EE或Spring等框架集成,确保数据一致性。 5. 异构数据库支持:Hibernate支持多种数据库,如MySQL、Oracle、PostgreSQL等,具备良好的数据库无关性。 四、...
这篇博客“Spring之Spring2.5集成Hibernate3.6”主要探讨了如何将两个经典的开源框架——Spring 2.5和Hibernate 3.6进行整合,以实现数据持久化的高效管理。 Spring 2.5版本是Spring框架的一个重要里程碑,它引入了...
本篇文章将深入探讨Hibernate的缓存机制和Spring的事务管理,以帮助开发者更好地理解和利用这两个强大的工具。 **一、Hibernate缓存** 1. **第一级缓存:Session缓存** - Hibernate的每个Session都有一个内置的...
在Spring框架中,我们可以利用Spring的HibernateTemplate或SessionFactoryBean来配置和管理Hibernate,以实现数据持久化。 **MySQL 8.0** 是一个开源的关系型数据库管理系统,以其高性能、稳定性及易用性而闻名。...
在EJB、Spring等容器中,可以配置使用JTA事务,无需手动管理事务的开始和结束。 **编程式事务管理:** 在非容器环境中,可以使用try-catch-finally结构来手动控制事务的边界。 **3. 事务的隔离级别** 在并发环境...
在实际项目中,这三者常常一起使用,Spring作为整体的框架管理器,负责协调MyBatis和Hibernate的事务、初始化和配置。MyBatis可以作为SQL查询的工具,提供灵活的SQL编写和映射,而Hibernate则适用于更复杂的对象...
将Spring与Hibernate整合并使用事务管理,能进一步提升应用的稳定性和效率。下面我们将详细讲解如何进行Spring AOP整合Hibernate以及如何在其中使用事务。 1. **Spring AOP简介** 面向切面编程(AOP)是Spring框架...
Spring以其强大的依赖注入和管理能力,结合Hibernate的数据库操作功能,可以构建出优雅且可维护的Java应用。 1. **Spring与Hibernate简介** - Spring是一个全面的后端开发框架,提供了AOP(面向切面编程)、DI...
1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、Hibernate、MyBatis等)配置相应的事务管理器。 2. 开启事务:使用`@Transactional`注解标记需要在事务中执行的方法。 3. 业务逻辑:在事务中...
在Hibernate中,你可以使用`Session`对象的`beginTransaction()`、`commit()`和`rollback()`方法来手动管理事务。例如,在一个业务服务方法中,你会先调用`beginTransaction()`,然后执行数据库操作,最后根据操作...
3. 整合 Spring 和 Hibernate:在 Spring 配置文件中声明 Hibernate 的 SessionFactory Bean,并使用 Spring 的事务管理器来控制事务。 4. 实体类和数据库表映射:使用 Hibernate 的注解或 XML 映射文件,将 Java 类...
通过以上步骤,我们不仅可以让Spring有效地管理Struts,实现更灵活的业务逻辑控制,还可以利用Spring的强大功能管理Hibernate,提高数据访问层的开发效率和维护性。这样的整合方式不仅简化了开发流程,还提高了系统...
Spring的IoC容器负责管理对象的生命周期和相互依赖关系,使得开发者无需手动创建和管理对象。此外,Spring还提供了数据访问抽象、Web MVC框架、事务管理、任务调度等多种功能,能够满足复杂的企业级应用需求。 ...
代码层面,我们可以利用Spring的JdbcTemplate或者HibernateTemplate来简化数据库操作,它们提供了事务边界内的操作方法,避免了手动管理事务的繁琐。对于复杂的业务逻辑,Spring的DAO层和Service层设计模式可以帮助...
这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心框架、Spring MVC和Spring Data JPA,而"H"则代表Hibernate,是一个流行的ORM(对象关系映射)框架。让我们详细探讨这些组件以及它们如何...