Spring学习历程---Hibernate访问数据库可脱离事务管理器
来源:互联网 发布:orange作图软件中文版 编辑:程序博客网 时间:2024/05/16 17:55
JdbcTemplate执行的语句马上提交,没有事务,所以没有必要在Spring应用中配置事务管理器,因为即使配置了,也没有用。
对于Hibernate而言,情况便有不同,因为hibernate并不会立刻发送SQL语句,只在commit 或 flush 一级缓存时,才真正的向数据库发送语句。
所以,即使底层数据库不支持事务,Hibernate的事务管理也是有一定好处的,不会对数据操作产生负面影响。
但是,不使用Hibernate事务管理器,在Spring中,Hibernate照样可以工作。
User.java
package com.baobaotao;import org.apache.commons.lang.builder.ReflectionToStringBuilder;import javax.persistence.Entity;import javax.persistence.Table;import javax.persistence.Column;import javax.persistence.Id;import java.lang.reflect.Field;import java.io.Serializable;/** * @author 陈雄华 * @version 1.0 */@Entity@Table(name="T_USER")public class User implements Serializable{ @Id @Column(name = "USER_NAME") private String userName; private String password; private int score; @Column(name = "LAST_LOGON_TIME") private long lastLogonTime = 0; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public long getLastLogonTime() { return lastLogonTime; } public void setLastLogonTime(long lastLogonTime) { this.lastLogonTime = lastLogonTime; } public String toString() { return (new ReflectionToStringBuilder(this) { protected boolean accept(Field f) { if(f.getType().isPrimitive() || f.getType() == String.class ){ return true; }else{ return false; } } }).toString(); }}这只是向数据库表映射而已。
UserHibernateWithoutTransManagerService.java
package com.baobaotao.withouttx.hiber;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;import org.springframework.stereotype.Service;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.orm.hibernate3.HibernateTemplate;import org.apache.commons.dbcp.BasicDataSource;import org.springframework.test.jdbc.SimpleJdbcTestUtils;import com.baobaotao.User;@Service("hiberService")public class UserHibernateWithoutTransManagerService { @Autowired private HibernateTemplate hibernateTemplate; public void addScore(String userName,int toAdd){ User user = hibernateTemplate.get(User.class,userName); user.setScore(user.getScore()+toAdd); //在无事务上下文的环境下,显式调用update将即时向数据库发送SQL hibernateTemplate.update(user); } public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("com/baobaotao/withouttx/hiber/hiberWithoutTx.xml"); UserHibernateWithoutTransManagerService service = (UserHibernateWithoutTransManagerService)ctx.getBean("hiberService"); JdbcTemplate jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate"); BasicDataSource basicDataSource = (BasicDataSource)jdbcTemplate.getDataSource(); //①检查数据源autoCommit的设置 System.out.println("autoCommit:"+ basicDataSource.getDefaultAutoCommit()); //②插入一条记录,初始分数为10 jdbcTemplate.execute("INSERT INTO t_user(user_name,password,score,last_logon_time) VALUES('tom','123456',10,"+System.currentTimeMillis()+")"); //③调用工作在无事务环境下的服务类方法,将分数添加20分 service.addScore("tom",20); //④查看此时用户的分数 int score = jdbcTemplate.queryForInt("SELECT score FROM t_user WHERE user_name ='tom'"); System.out.println("score:"+score); jdbcTemplate.execute("DELETE FROM t_user WHERE user_name='tom'"); }}
hiberWithoutTx.xml
<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close" p:driverClassName="${jdbc.driverClassName}"p:url="${jdbc.url}" p:username="${jdbc.username}"p:password="${jdbc.password}"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"/> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-ref="dataSource"> <property name="annotatedClasses"> <list> <value>com.baobaotao.User</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" p:sessionFactory-ref="sessionFactory"/> <context:component-scan base-package="com.baobaotao.withouttx.hiber"/> </beans>没有配置Hibernate事务管理器,然而程序依然可以运行,说明hibernate在spring中,没有事务管理器的情况下,依然可以正常的进行数据的访问。
0 0
- Spring学习历程---Hibernate访问数据库可脱离事务管理器
- spring学习之事务管理器
- spring整合hibernate事务管理器配置
- 数据库事务、Hibernate事务、Spring事务
- Spring整合Hibernate开发 - 使用事务管理器操作数据库 - 主配置文件
- 【Spring学习32】Spring事务(2):事务管理器
- spring hibernate 集成:spring使用容器JTA事务管理器
- spring hibernate整合事务管理器bean初始化失败
- 【Hibernate学习笔记】数据库事务
- Spring+Hibernate多线程访问数据库
- Spring事务管理器
- Spring事务管理器分类
- Spring事务管理器分类
- Spring事务管理器
- spring事务管理器
- Spring的事务管理器
- Spring的事务管理器
- spring事务管理器
- leetcode(31).111. Minimum Depth of Binary Tree
- #DeepLearningBook#算法概览之五:Sequence Modeling
- iOS 10 不提示「是否允许应用访问数据」,导致应用无法使用的解决方案
- Java面向对象之封装
- Oracle中查找没有主键的表
- Spring学习历程---Hibernate访问数据库可脱离事务管理器
- [李景山php]每天TP5-20161228|thinkphp5-Console.php-5
- IOS两张图片合成为一张图片
- 在Linux系统下搭建Samba共享服务器的详细步骤
- VR系列——Oculus Audio sdk文档:四、传统Oculus声场定位技术的统一集成指南(3)——安装到Unity
- IDEA中.gitignore文件示例
- 【Java】SpringBoot 工程配置 session 有效时长
- 大数据学习第一弹你懂的之Hive升级到2.1安装配置全过程
- 勾股定理一日一证连载170