问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ibatis集成spring 声明式事务管理

发布网友 发布时间:2022-04-30 02:14

我来回答

3个回答

热心网友 时间:2022-04-08 11:02

我提供一个实例:

数据库是MYSQL , 数据源是C3P0 ,

-----------
1) 建表语句 :

----------------
DROP TABLE IF EXISTS book ;

CREATE TABLE book(
id int(11) NOT NULL auto_increment COMMENT 'primary key',
name varchar(60) default NULL COMMENT 'book name',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='my book table';

----------------
注意了,在MYSql 中 表的引擎一定要用InnoDB ,如果用MyISAM 的话,是不支持事务的。

2) JAVA Bean
Book.java

-------------------
package com.spring.demo.bean;

import java.io.Serializable;

public class Book implements Serializable {

public Book(){}

public Book(String name){
this.name = name;
}

/**
* ID
*/
private Integer id ;

/**
* 书名
*/
private String name ;

// getter and setter
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

-------------------

3)Book.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">

<sqlMap namespace="Book" >

<typeAlias alias="book" type="com.spring.demo.bean.Book"/>

<resultMap id="result_map_book" class="book" >
<result property="id" column="id" javaType="integer"/>
<result property="name" column="name" javaType="string"/>
</resultMap>

<insert id="insertBook" parameterClass="book">
insert book(name) values(#name#)
</insert>

<update id="updateBook" parameterClass="book">
update book set name=#name# where id=#id#
</update>

<delete id="deleteBook" parameterClass="int">
delete from book where id=#value#
</delete>

<select id="selectBookById" parameterClass="int" resultMap="result_map_book">
select id , name from book where id=#value#
</select>

<select id="selectBookByName" parameterClass="string" resultMap="result_map_book">
select id , name from book where name like #value#
</select>

</sqlMap>
---------------------

4)spring 的 applicationContext.xml

---------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
<!-- 引入参数配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>jdbc.properties</value>
</list>
</property>
</bean>

<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass"><value>${jdbc.driverClass}</value></property>
<property name="jdbcUrl"><value>${jdbc.url}</value></property>
<property name="user"><value>${jdbc.user}</value></property>
<property name="password"><value>${jdbc.password}</value></property>
<property name="initialPoolSize"><value>${jdbc.initialPoolSize}</value></property>
<property name="minPoolSize"><value>${jdbc.minPoolSize}</value></property>
<property name="maxPoolSize"><value>${jdbc.maxPoolSize}</value></property>
</bean>

<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>

<!-- 事务代理*的配置 -->
<bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<!-- ibatis sqlMapClient 配置 -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:sqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>

<!-- 配置 -->
<bean id="ibatis_BookDao" class="com.spring.demo..Ibatis_BookDao">
<property name="sqlMapClient" >
<ref bean="sqlMapClient"/>
</property>
</bean>

<!-- 添加了事务的管理类 -->
<bean id="ibatis_BookManager" parent="baseTransactionProxy">
<property name="target">
<bean class="com.spring.demo.manager.Ibatis_BookManager">
<property name="">
<ref bean="ibatis_BookDao"/>
</property>
</bean>
</property>
</bean>

</beans>

---------------

5) 数据源参数配置文件:jdbc.properties
【说明 :按照你的具体情况来配置】:
------------
jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/springdemo?useUnicode=true&characterEncoding=utf-8

jdbc.user=root

jdbc.password=root

jdbc.initialPoolSize=1

jdbc.minPoolSize=1

jdbc.maxPoolSize=10
------------

6) IBATIS 的初始化配置 sqlMapConfig.xml
------------
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<settings useStatementNamespaces="true" />

<sqlMap resource="com/spring/demo/bean/Book.xml"/>

</sqlMapConfig>
------------

配置完毕,下面是DAO 和 测试方法:

Ibatis_BookDao.java
----------------
package com.spring.demo.;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.spring.demo.bean.Book;

public class Ibatis_BookDao extends SqlMapClientDaoSupport {

/**
* 添加一本书
* @param book
*/
public void insertBook(Book book){
this.getSqlMapClientTemplate().insert("Book.insertBook", book);
}

/**
* 修改一本书
* @param book
*/
public void updateBook(Book book){
this.getSqlMapClientTemplate().update("Book.updateBook", book);
}

/**
* 根据ID来删除一本书
* @param id
*/
public void deleteBook(Integer id){
this.getSqlMapClientTemplate().delete("Book.deleteBook", id);
}

/**
* 根据ID来查询书对象
* @param id
* @return
*/
public Book selectBookById(Integer id){
return (Book)this.getSqlMapClientTemplate().queryForObject("Book.selectBookById", id);
}

/**
* 根据书名来查询相关*录列表
* @param name
* @return
*/
public List selectBookByName(String name){
return this.getSqlMapClientTemplate().queryForList("Book.selectBookByName", "%"+name+"%" );
}

}

----------------

Ibatis_BookManager.java
-------------------
package com.spring.demo.manager;

import java.util.List;

import com.spring.demo.bean.Book;
import com.spring.demo..Ibatis_BookDao;

public class Ibatis_BookManager {

private Ibatis_BookDao = null ;

/**
* 批量添加书本,如果列表长度超过3,就抛出异常
* @param books
*/
public void insertBooks(List books){

for(int i=0 ; i<books.size() ;i++){
if(i>2){
System.out.println("列表太长,中断事务");
throw new RuntimeException("中断事务异常,当列表长度大于3的时候故意抛出,看看事务是否回滚");
}
Book book = (Book)books.get(i);
.insertBook(book);
}
}

/**
* 添加一本书
* @param book
*/
public void insertBook(Book book){
this..insertBook(book);
}

/**
* 修改一本书
* @param book
*/
public void updateBook(Book book){
this..updateBook(book);
}

/**
* 根据ID来删除一本书
* @param id
*/
public void deleteBook(Integer id){
this..deleteBook(id);
}

/**
* 根据ID来查询书对象
* @param id
* @return
*/
public Book selectBookById(Integer id){
return this..selectBookById(id);
}

/**
* 根据书名来查询相关*录列表
* @param name
* @return
*/
public List selectBookByName(String name){
return this..selectBookByName(name);
}

// getter and setter //
public Ibatis_BookDao getDao() {
return ;
}

public void setDao(Ibatis_BookDao ) {
this. = ;
}
-------------------

测试类:

IbatisDemo.java
------------------
package com.spring.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.demo.bean.Book;
import com.spring.demo.manager.Ibatis_BookManager;
import com.spring.demo.manager.Jdbc_BookManager;

public class IbatisDemo {

/**
* @param args
*/
public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml") ;

Ibatis_BookManager manager = (Ibatis_BookManager)context.getBean("ibatis_BookManager");

List books = new ArrayList();

books.add(new Book("book_10"));
books.add(new Book("book_11"));
books.add(new Book("book_12"));
books.add(new Book("book_13"));
manager.insertBooks(books);

System.out.println("OK");

}

}
------------------

说明:MYSQL 的事务完整性我是测试过的。
之前有个朋友吧数据库换成 SQL SERVER 的时候事务完整性就出现问题。
这个问题有待研究。

热心网友 时间:2022-04-08 12:20

在Spring中配置
<!-- Transaction-创建事务管理对象 -->
<bean id="bizTransManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- Aop-声明式事务的配置 -->
<tx:advice id="txAdvice" transaction-manager="bizTransManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS"
read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="bidMethods"
expression="execution(* cn.apatch.ordersys.biz.impl.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="bidMethods" />
</aop:config>

热心网友 时间:2022-04-08 13:55

需要找本书来看!
spring事务管理的方式有几种?

◆为不同的事务API提供一致的编程模型,如JTA、JDBC、Hibernate、iBATIS数据库层JDO ◆提供比大多数事务API更简单的、易于使用的编程式事务管理API ◆整合Spring数据访问抽象 ◆支持Spring声明式事务管理 spring事务实现方式有哪些? 第一种方式:每个Bean都有一个代理 bean?id="sessionFactory" class="org.springframework...

ssh是如何实现三层架构的? 每层分别用什么技术实现?

如果应用程序才用了Struts+Hibernate的架构,Spring可以帮助整合两者。在创建对象时,可以通过Spring进行注入;对于事务管理,可以通过Spring集成声明式事务管理到到应用程序中等。

spring需要哪些jar包

3) spring-aop.jar需spring-core.jar,spring-beans.jar,cglib-nodep-2.1_3.jar,aopalliance.jar4) spring-context.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,commons-collections.jar,aopalliance.jar5) spring-dao.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-context.jar6) s...

Java开源框架是什么?

Spring的数据访问架构还集成了 Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的 aspects。

求助:英语达人,能不能帮我把软件工程师简历中的项目经验翻译成英文的...

总体技术:基于Struts+ Spring+JBPM+ Hibernate的多层架构:展现层使用Struts来实现MVC模式,通过page-taglib实现分页,采用JSTL与自定义标签,使用Ajax技术使系统具有较好的用户体验;业务逻辑层利用Spring的IOC来维护业务对象之间的关联,利用Spring的AOP进行声明式事务管理,采用贫血Domain Object模型;...

Spring高级程序设计的目录

16.1 Spring事务抽象层简介 51816.2 分析事务属性 51916.2.1 探索TransactionDefinition接口 51916.2.2 使用TransactionStatus接口 52016.2.3 PlatformTransactionManager的实现 52116.3 对一个事务管理示例的探索 52116.4 编程式事务管理 52916.4.1 使用TransactionTemplate类 53116.4.2 编程式事务管理小结 53216.5 声明性...

jf框架?

Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse平台下一个...

轻量级方法的成功秘诀

您可以通过 Spring 来利用普通 Java™ 对象(POJO)编程,使用依赖注入解析 POJO 间的依赖性,然后使用面向方面编程(AOP)将服务与它们相关联。Spring 也提供了许多胶水代码,这使您可以更加轻松地使用 Java 2 平台企业版(J2EE)服务,比如用于事务的 Java 事务 API (JTA)、用于远程控制的远程方法调用(RMI)、用于管理...

什么是JAVA?

Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的 aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。【SpringIDE:Eclipse平台下一...

请各位英语达人帮我翻译一下软件工程师简历中的 项目经验 不胜感激...

使用Ajax技术使系统具有较好的用户体验;业务逻辑层利用Spring的IOC来维护业务对象之间的关联,利用Spring的AOP进行声明式事务管理,采用贫血Domain Object模型;持久化层使用hibernate来实现,通过DAO模式封装PO对象;将JBPM与Spring整合,实现公文流转模块;结合Freemarker模板技术实现动态表单定义模型;实现扩展的基于RBAC授权与认证...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小牛惠普贷款是骗人的吗? 小牛惠普贷款会骗人的吗? 小牛惠普淘宝贷需要什么手续 别人用小牛惠普贷款,申请表联系人写的我名字和手机号,有我事不_百度知... 女孩初潮年龄一般多大正常 对前一个问题的补充:没有房本的房子怎么买 有买卖合同没房本的房子可以买卖吗 成都哪里做儿童牙齿矫正好 在武汉哪里可以做儿童牙齿矫? 成都儿童矫正牙齿哪里好? getsqlmapclienttemplate.queryforlist传递的参数到xml文件怎么使用_百... ibatis spring 怎样用注解的方式注入sqlMapClient ...sqlMapClient是通过继承sqlMapClientDaoSupport 怎么把板栗壳剥掉 怎么把板栗壳剥掉 this.getSqlMapClientTemplate和getSqlMapClientTemplate区别?_百度... 风干板栗太干,皮与肉不分离是怎么回事? 如何获取序列getsqlmapclienttemplate.queryforobject 苦瓜干板栗壳一起泡水喝有什么功效 板栗刺刺壳晒干多少鲜壳可以晒一斤干壳? 板栗刺刺壳晒干多少鲜壳可以晒一斤干壳? ...DAOImpl中,是不是必须继承SqlMapClientDaoSupport,能不能换成别的... 板栗壳属于什么垃圾 板栗壳属于什么垃圾 spring+ibatis在spring配置文件中注入sqlmapclient时,一直报错,详情代码... vivox27是WCDMA制式手机吗? vivox27是什么2021年是鼠年? android27设备是什么手机 win10如何安装联想M7205打印驱动- 问一问 经常有人给我打电话问我需不需要贷款,利率和银行差 使用ibatis自带的分页 getSqlMapClientTemplate().queryForList(&quot;select... 黄鑫的简介 黄鑫的详细资料 struts2中action怎么调用指定xml文件的方法 黄鑫的人物简介 ibatis-spring怎么获得当前的connection 巫溪法院黄鑫个人资料简介 假设java中定义了一个实体类User,有name和age等20个属性,然后有个函数... ...orm.ibatis.support.SqlMapClientDaoSupport cannot be 湘潭华鑫机电设备有限公司怎么样? 潍坊科苑数字科技有限责任公司怎么样? 锦绣缘31集台词黄鑫 电影《中国飞侠》,究竟有多真实? 绍兴柯桥黄鑫构件有限公司怎么样? 我家餐桌椅油漆味重怎么办 《轻松学会独立思考》epub下载在线阅读全文,求百度网盘云资源 北京黄鑫服饰有限公司怎么样? 氧气呼吸器校验仪正确操作方法有哪些? 滁州市申龙食品有限公司怎么样? 有没有人给一下口罩呼吸阻力测试仪,呼吸阻力测试仪,呼吸阀气密性检测仪的简单介绍以及原理是什么?