框架:
spring+ibatis+mysql
数据库:
oracleUser表:有userId和userName列
对应的DDL语句:create table user(userId NUMBER(5) primary key,userName VARCHAR2(50))User类:
package model;
public class User {
// Fields
private Integer userid;
private String username; public Integer getUserid() {
return this.userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
} public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
}
ibatis配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<typeAlias alias="user" type="model.User"/>
<insert id="saveUser" parameterClass="user">
insert into user(userid,username) values(#userid#,#username#)
</insert>
</sqlMap>配置文件(applicationContext.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- DataSource -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.200:1521:test</value>
</property>
<property name="username">
<value>linmin</value>
</property>
<property name="password">
<value>lm123</value>
</property>
</bean>
<!-- Spring iBatis Template -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- UserDAO方案一 -->
<bean id="userDAO1" class="dao.UserDAOImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean>
</beans>
DAO接口:
package dao;
import model.User;
public interface UserDAO {
public User1 saveUser(User user) throws Exception;
}
DAO实现类:
package dao;
import java.sql.SQLException;
import model.User;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.sqlmap.client.SqlMapClient;
public class UserDAOImpl implements UserDAO {
protected SqlMapClient sqlMapClient;public User1 saveUser(User user) throws Exception{
try {
sqlMapClient.startTransaction();
sqlMapClient.insert("saveUser",user);
sqlMapClient.insert("saveUser",user);
sqlMapClient.commitTransaction();
return user;
} finally{
sqlMapClient.endTransaction(); }}public SqlMapClient getSqlMapClient() {
return sqlMapClient;
}public void setSqlMapClient(SqlMapClient sqlMapClient) {
this.sqlMapClient = sqlMapClient;
}}测试类:
package test;
import dao.*;
import model.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class TestDAO1 {
public static void main(String[] args) {
try{
ClassPathResource res = new ClassPathResource("applicationContext.xml");
XmlBeanFactory factory = new XmlBeanFactory(res);
User user = new User(1,"guadi");
UserDAO dao = (UserDAO)factory.getBean("userDAO1");
dao.saveUser(user);
}catch(Exception e){
e.printStackTrace();
}}}
预期结果:
两语句均回滚,数据库中无记录
结果:数据库中有一条记录
userid:1 username:guadi
即第一条insert语句成功,第二条insert语句失败这是为什么啊,为什么不能将声明的整个事务回滚,如果可以的话,该如果写?
spring+ibatis+mysql
数据库:
oracleUser表:有userId和userName列
对应的DDL语句:create table user(userId NUMBER(5) primary key,userName VARCHAR2(50))User类:
package model;
public class User {
// Fields
private Integer userid;
private String username; public Integer getUserid() {
return this.userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
} public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
}
ibatis配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<typeAlias alias="user" type="model.User"/>
<insert id="saveUser" parameterClass="user">
insert into user(userid,username) values(#userid#,#username#)
</insert>
</sqlMap>配置文件(applicationContext.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- DataSource -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.200:1521:test</value>
</property>
<property name="username">
<value>linmin</value>
</property>
<property name="password">
<value>lm123</value>
</property>
</bean>
<!-- Spring iBatis Template -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- UserDAO方案一 -->
<bean id="userDAO1" class="dao.UserDAOImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean>
</beans>
DAO接口:
package dao;
import model.User;
public interface UserDAO {
public User1 saveUser(User user) throws Exception;
}
DAO实现类:
package dao;
import java.sql.SQLException;
import model.User;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.sqlmap.client.SqlMapClient;
public class UserDAOImpl implements UserDAO {
protected SqlMapClient sqlMapClient;public User1 saveUser(User user) throws Exception{
try {
sqlMapClient.startTransaction();
sqlMapClient.insert("saveUser",user);
sqlMapClient.insert("saveUser",user);
sqlMapClient.commitTransaction();
return user;
} finally{
sqlMapClient.endTransaction(); }}public SqlMapClient getSqlMapClient() {
return sqlMapClient;
}public void setSqlMapClient(SqlMapClient sqlMapClient) {
this.sqlMapClient = sqlMapClient;
}}测试类:
package test;
import dao.*;
import model.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class TestDAO1 {
public static void main(String[] args) {
try{
ClassPathResource res = new ClassPathResource("applicationContext.xml");
XmlBeanFactory factory = new XmlBeanFactory(res);
User user = new User(1,"guadi");
UserDAO dao = (UserDAO)factory.getBean("userDAO1");
dao.saveUser(user);
}catch(Exception e){
e.printStackTrace();
}}}
预期结果:
两语句均回滚,数据库中无记录
结果:数据库中有一条记录
userid:1 username:guadi
即第一条insert语句成功,第二条insert语句失败这是为什么啊,为什么不能将声明的整个事务回滚,如果可以的话,该如果写?
解决方案 »
- 大并发的java容器选择
- SQL查询排序求助啊
- hibernate+spring事务
- 如何spring jdbc 来连接并执行oracle 存储过程(带参)并返回结果
- 给一个准确答案!!
- 请问有么有书介绍xmpp
- 请问高手!用STRUTS+HIBERNATE编写登陆程序时出现“java.lang.NoClassDefFoundError: org/hibernate/Session”,加上MAIN函数单独运行可
- 请问Mybatis3.2自定义Ehcache缓存怎么指定配置文件?
- J2EE开发环境配置要求?(在线等待)
- 请高人给俺写个Applet访问远程计算机*.txt文件的例子,THANK YOU~
- 100分求教一个struts配置问题 跟帖有分
- hbm.xml文件为什么会消失
2、spring事务只有在 运行时异常和error的时候才回滚..
3、你贴的代码我没有看到那里配置事务了