Spring+iBatis+JOTM实现JTA事务

20 篇文章 0 订阅

Spring+iBatis+JOTM实现JTA事务

JOTM是个开源的JTA事务管理组件,可以让程序脱离J2EE容器而获得分布式事务管理的能力。 测试过程如下:

环境

1、准备软件环境

  • spring-framework-2.5.6.SEC01-with-dependencies.zip
  • ibatis-2.3.4
  • ow2-jotm-dist-2.1.4-bin.tar.gz
  • MySQL-5.1
  • JDK1.5

2、创建数据库环境

注意数据库引擎为InnoDB,只有这样才能支持事务。

CREATE DATABASE IF NOT EXISTS testdb_a    DEFAULT CHARACTER SET utf8; 
USE testdb_a; 
DROP TABLE IF EXISTS tab_a; 
CREATE TABLE tab_a ( 
    id bigint(20) NOT NULL, 
    name varchar(60) DEFAULT NULL, 
    address varchar(120) DEFAULT NULL, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE DATABASE IF NOT EXISTS testdb_b    DEFAULT CHARACTER SET utf8; 
USE testdb_b; 
DROP TABLE IF EXISTS tab_b; 
CREATE TABLE tab_b ( 
    id bigint(20) NOT NULL, 
    name varchar(60) DEFAULT NULL, 
    address varchar(120) DEFAULT NULL, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

建立项目testJOTM

1、建立项目

准备依赖的类库,结构如下:

  • \
    • spring-aop.jar
    • spring-beans.jar
    • spring-context-support.jar
    • spring-context.jar
    • spring-core.jar
    • spring-jdbc.jar
    • spring-jms.jar
    • spring-orm.jar
    • spring-test.jar
    • spring-tx.jar
    • spring-web.jar
    • spring-webmvc-portlet.jar
    • spring-webmvc-struts.jar
    • spring-webmvc.jar
    • aspectjrt.jar
    • aspectjweaver.jar
    • cglib-nodep-2.1_3.jar
    • asm-2.2.3.jar
    • log4j-1.2.15.jar
    • asm-commons-2.2.3.jar
    • asm-util-2.2.3.jar
    • aopalliance.jar
    • mysql-connector-java-5.1.6-bin.jar
    • ibatis\
      • ibatis-2.3.4.726.jar
      • sql-map-2.dtd
      • sql-map-config-2.dtd
    • jotm\
      • license.txt
      • xapool.jar
      • jotm-core.jar
      • jotm-standalone.jar
      • jotm-jms.jar
      • jotm-datasource.jar
      • ow2-jta-1.1-spec.jar
      • jotm-client.jar
    • jakarta-commons\
      • commons-attributes-api.jar
      • commons-attributes-compiler.jar
      • commons-beanutils.jar
      • commons-codec.jar
      • commons-collections.jar
      • commons-dbcp.jar
      • commons-digester.jar
      • commons-discovery.jar
      • commons-fileupload.jar
      • commons-httpclient.jar
      • commons-io.jar
      • commons-lang.jar
      • commons-logging.jar
      • commons-pool.jar
      • commons-validator.jar
    • junit\
      • junit-3.8.2.jar
      • junit-4.4.jar
      • license.txt
    • log4j\
      • log4j-1.2.15.jar

2、根据表建立entity和SQLMap

public class TabA implements Serializable { 
        private Long id; 
        private String name; 
        private String address; 
        //省略getter/setter 
}        
public class TabB implements Serializable { 
        private Long id; 
        private String name; 
        private String address; 
        //省略getter/setter
}        

TabA.xml

<?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" > 

<!-- 表名:tab_a --> 
<sqlMap namespace="tab_a"> 
        <typeAlias alias="TabA" type="com.lavasoft.stu.jtom.entity.TabA"/> 
        <resultMap id="result_base" class="TabA"> 
                <result property="id" column="id"/> 
                <result property="name" column="name"/> 
                <result property="address" column="address"/> 
        </resultMap> 
        <!-- 添加 --> 
        <insert id="insert" parameterClass="TabA"> 
                insert into tab_a( 
                id, 
                name, 
                address 
                ) values ( 
                #id#, 
                #name#, 
                #address# 
                ) 
                <selectKey keyProperty="id" resultClass="long"> 
                        select LAST_INSERT_ID() 
                </selectKey> 
        </insert> 
        <!-- 更新 --> 
        <update id="update" parameterClass="TabA"> 
                update tab_a set 
                id = #id#, 
                name = #name#, 
                address = #address# 
                where id = #id# 
        </update> 
        <!-- 删除 --> 
        <delete id="deleteById" parameterClass="long"> 
                delete from tab_a 
                where id = #value# 
        </delete> 
        <!-- 根据ID获取 --> 
        <select id="findById" parameterClass="long" resultMap="tab_a.result_base"> 
                select * 
                from tab_a 
                where id = #value# 
        </select> 
</sqlMap>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值