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

spring管理jdbc事务的Demo代码

发布网友 发布时间:2022-04-07 20:36

我来回答

2个回答

热心网友 时间:2022-04-07 22:06

我提供一个实例:

数据库是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"
"">

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

<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>$</value></property>
<property name="jdbcUrl"><value>$</value></property>
<property name="user"><value>$</value></property>
<property name="password"><value>$</value></property>
<property name="initialPoolSize"><value>$</value></property>
<property name="minPoolSize"><value>$</value></property>
<property name="maxPoolSize"><value>$</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"
"">

<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 的时候事务完整性就出现问题。
这个问题有待研究。
追问你用的是ibatis,虽然不是我想要的,但是我没有验证你说的mysql支持事务的问题,我回去验证一下,如果是这样的话,谢谢了。

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

回去试验了,不是这的事

热心网友 时间:2022-04-07 23:24

应用了jdbc.properties文件 ,我自己测试,没有问题,而且是spring配置式事务的。 需要JAR包 spring.jar c3p0.jar mysql.jar cglib.jar asm.jar antlr.追问能不能回答的具体点,谢谢了

spring-data-jdbc的基础使用(一)

运行demo,通过默认方法执行基本操作。当默认方法无法满足需求时,我们可以通过关键字来编写查询方法,无需手动编写SQL语句,支持复合查询等特性。此外,还支持@Query注解自定义查询。在需要进行修改或删除操作时,添加@Modifying注解,简化SQL语句的编写。引入生命周期的事件机制,利用ApplicationListener监听操作,...

Spring系列之spring中编程式事务怎么用的?

代码中会用到JdbcTemplate,对这个不理解的可以看一下:JdbcTemplate使用详解@Testpublic void test1() throws Exception {//定义一个数据源org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.set...

Spring针对事务处理提供哪两种事务编程模式。

Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。1.TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一样的方法。它使用回调方法,把应用程序从处理取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的。代码片段...

Spring6 的JdbcTemplate的JDBC模板类的详细使用说明

配置 spring.xml 文件,引入 JdbcTemplate 类,并注入 DataSource 数据源,用于连接数据库。自定义数据源类,实现 javax.sql.DataSource 接口,重写 getConnection 方法,用于获取数据库连接。将数据源配置到 JdbcTemplate 中。通过 JdbcTemplate 可以实现增删改查数据库的基本操作。例如,使用 update 方法插...

jdbctemplate在哪个包

使用JdbcTemplate可以大大减少数据库操作的复杂性,并且避免手动编写繁琐的代码。通过JdbcTemplate,开发者可以更方便地进行数据库查询、更新、插入和删除等操作。此外,JdbcTemplate还提供了异常处理和事务管理的功能,提高了数据库操作的可靠性和安全性。因此,在Spring框架中,当需要进行数据库操作时,通常会...

spring事务的特性?

当具体的数据库操作中有一个发生异常,那么整个事务就回滚,所有的增删改操作都将无效。而spring配置式事务要达到的效果是:1,对指定的类的方法添加事务,2,配置管理,不需要每个数据库造作都像上面一样写那么多代码,3,spring的配置式事务可以吧多个操作数据库的方法配置在一个事务中,这样灵活性更加...

spring配置jdbc事务管理不起作用

&lt;context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /&gt; &lt;/context:component-scan&gt;1234 修改spring-mybatis.xml &lt;!-- 配置事务管理器 --&gt; &lt;bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property...

java spring+hibernate+dorado框架 如何对事务进行管理

用Spring的事务管理, 在你的Spring 的配置文件中注入TxManager &lt;bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; &lt;property name="sessionFactory" ref="sessionFactory" /&gt; &lt;/bean&gt; 然后用AOP 处理你的事务 或者直接用annotation 在配置文件中加入 &lt;tx:...

Spring JdbcTemplate事务管理器内存泄漏问题,怎么解决

Spring JdbcTemplate事务管理器内存泄漏问题,怎么解决 &lt;bean id="mysqlTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt; &lt;property name="transactionManager" ref="transactionManager" /&gt; &lt;property name="transactionAttributes"&gt; &lt;props&gt; &lt;prop key="find*...

spring 两个数据源 怎么配事务

然后定义JTA事务如下:&lt;bean id="transactionManager-xa"class="org.springframework.transaction.jta.JtaTransactionManager"&gt; &lt;property name="transactionManagerName" value="java:/TransactionManager" /&gt; &lt;/bean&gt; 通过声明式事务模板(代理),指定目标类的特定方法采用JTA事务:&lt;bean class="org.spring...

sharding jdbc 事务 springboot jdbc spring websocket jdbc事务管理 jdbc事务代码 spring data jdbc springjdbc spring配置jdbc springmvc连接mysql
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
css背景图片代码css背景图片 顺丰快递可以寄猫猫吗? 顺丰快递可以发活体宠物吗 顺丰快递可以快递宠物狗吗 请问:为什么安装完VMware_Workstation_8.0.4 后,没有反应,哪里操作不对... 干了2 年多 Java 外包,终于脱离了! 动漫中白衬衫+黑短裙+长筒袜+黑长直的有谁? 求动漫少女白衬衫大图 小米6x屏幕老闪怎么办?? 解梦,我梦见被一群人撕扯被生吃了,不用任何工具直接用手抓我身上肉... 凉拌黄西菜怎么做好吃,凉拌黄西菜的家常做法? 15款简单易做的经典小吃做法(组图) 成都曾有种小吃叫米老鼠,这种小吃是怎么做出来的? 淘宝买美版三网苹果手机靠谱吗 为什么淘宝里的苹果美版手机都是激活过的? 申请支付宝时,两个支付宝的名字和手机号弄错了,能换回来吗? 淘宝上买到已激活的美版苹果怎么查是否是翻新机 淘宝上苹果美版手机是否有真的不是翻新的 在手机淘宝上购买二手美版苹果手机靠谱吗? 淘宝美版已激活iphone靠谱吗 我在淘宝一千多买的苹果12手机商家说保真一年全国保修是真的吗? 淘宝上买iphone美版靠谱吗 某淘宝店卖美版无锁iphone原封未激活的,是真的假的 在淘宝上买二手美版苹果手机靠谱吗? 在ppt中,我想要在一个的文本框内使字体在水平线上不停地左右移动,怎样才能做到?谢谢! 淘宝上那些低价说是美版iphone到底来自哪里? 淘宝上卖的美版苹果手机是真的吗 ppt中的文字排列样式在哪里?(各位请救救急啊!谢谢了) 为什么淘宝上,还是买不到美版的iPhone 12? 手机APP WPS office 如何把PPT的字体做出动画效果 是字体动画效果 谢谢谢 今天篮球比赛有哪些呢? 今天有什么篮球赛事 今天晚上有篮球比赛吗?在线等! 给某一个人写一封信600字作文 写给——的一封信,要求600字左右,回答得好有悬赏!!粘贴党可以入内... 用qq号申请的被盗咋找回? 我的被人盗用了怎么办? 被盗了怎么办怎么找回来? qq号被盗怎么办 被盗找不回密码,找不回账号怎么办? 被盗找不回密码,找不回账号怎么办? 被盗了封了怎么办? 苹果手机浏览器下载的游戏安装不了 被盗了怎么办? qq号和被盗了怎么办? 被盗了,密码也被改了,而且还被绑定了QQ,现在应该怎么弄回来? 被盗怎么样办? 什么是数据库建模,为什么要数据库建模,有什么好处 用qq号申请的被盗咋找回? 解释数据库模型的概念,为什么要将数据库分成两个