spring配置c3p0连接池、spring的声明式事务管理

spring配置c3p0连接池、spring的声明式事务管理

一、spring配置c3p0连接池:

1、导入maven依赖:

<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>

2、在spring配置文件中配置连接池:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

	<!-- spring配置c3p0连接池 start -->
	<!-- 1.配置连接池 -->
	<!-- 1.1创建连接池对象,dataSource的名字不能改变 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 1.2设置连接池的属性 -->
		<property name="driverClass" value="com.mysql/jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///test-ssm"></property>
		<property name="user" value="root"></property>
		<property name="password" value="admin"></property>
	</bean>
	<!-- 2.创建jdbcTemplate对象,并注入连接池对象 -->
	<bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 3.创建userDao对象,并注入jdbctemplate对象 -->
	<bean id="userDao" class="com.zwp.dao.UserDao">
		<property name="jdbcTemplate" ref="jdbctemplate"></property>
	</bean>
	<!-- 4.创建userService对象,并注入userDao对象 -->
	<bean id="userService" class="com.zwp.service.UserService">
		<property name="userDao" ref="userDao"></property>
	</bean>
	<!-- spring配置c3p0连接池 end -->
</beans>

3、相关类的代码:

public class UserDao {
	
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	
	public void add(){
		System.out.println("UserDao调用JdbcTemplate..");
		String sql="insert into user values(?,?)";
		jdbcTemplate.update(sql,"小张","666");
	}
}
public class UserService {
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public void add(){
		System.out.println("service调用dao...");
		userDao.add();
	}
}

4、测试类:

public class Test2 {
	@Test
	public void test6(){
		ApplicationContext context=
				new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
		
		UserService userService = (UserService) context.getBean("userService");
		System.out.println("调用service...");
		userService.add();
	}
}

5、运行结果:

spring配置c3p0连接池、spring的声明式事务管理

二、spring的声明式事务管理:

spring的声明式事务管理有两种实现:

(1)基于xml配置文件的实现;

(2)基于注解方式的实现;

1、基于xml配置文件实现:

步骤:第一步:配置连接池;

第二步:配置事务管理器;

第三步:配置事务增强;

第四步:配置切面;

spring配置文件配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">


	<!-- 声明式事务管理-基于xml配置文件实现start -->
	<!-- 1.配置连接池 -->
	<!-- 1.1创建连接池对象 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 1.2设置连接池的属性 -->
		<property name="driverClass" value="com.mysql/jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///test-ssm"></property>
		<property name="user" value="root"></property>
		<property name="password" value="admin"></property>
	</bean>
	<!-- 5.配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 6.配置事务增强 -->
	<tx:advice id="txadvice" transaction-manager="transactionManager">
		<!-- 6.1 做事务操作 -->
		<tx:attributes>
			<!-- 6.2 设置进行事务操作的方法匹配规则 -->
			<tx:method name="account" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>
	<!-- 7.配置切面 -->
	<aop:config>
		<!-- 7.1 配置切入点 -->
		<aop:pointcut expression="execution(* com.zwp.service.UserService.*(..))" id="pointcut1"/>
		<!-- 7.2 配置切面 -->
		<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
	</aop:config>	
	<!-- 声明式事务管理-基于xml配置文件实现end -->
</beans>
public class UserService {
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public void account(){
		//小明增加1000
		userDao.increase();
		
		//出现异常:
		int i=10/0;
		
		//小李减少1000
		userDao.decrease();
	}
}
public class Test2 {

	@Test
	public void test6(){
		ApplicationContext context=
				new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
		
		UserService userService = (UserService) context.getBean("userService");
		System.out.println("调用service...");
		userService.account();;
	}
}

运行结果:在执行account()方法是,出现异常,但是发生异常前的数据库操作没有被保存到数据库,说明配置成功了。

2、基于注解方式的实现:

步骤:第一步:配置连接池;

第二步:配置事务管理器;

第三步:开启事务注解;

第四步:在要使用事务的方法所在类上面添加注解@Transactional。

spring配置文件配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">



	<!-- spring配置c3p0连接池 start -->
	<!-- 1.配置连接池 -->
	<!-- 1.1创建连接池对象 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 1.2设置连接池的属性 -->
		<property name="driverClass" value="com.mysql/jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///test-ssm"></property>
		<property name="user" value="root"></property>
		<property name="password" value="admin"></property>
	</bean>
	<!-- spring配置c3p0连接池 end -->
	
	<!-- 5.配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 开启事务注解 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>
//第四步:在要使用事务的方法所在类上面添加注解@Transactional
@Transactional
public class UserService {
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public void account(){
		//小明增加1000
		userDao.increase();
		
		//出现异常:
		int i=10/0;
		
		//小李减少1000
		userDao.decrease();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114730.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机点餐系统概述_实训答辩安卓点餐系统ppt课件「建议收藏」

    手机点餐系统概述_实训答辩安卓点餐系统ppt课件「建议收藏」《实训答辩安卓点餐系统ppt课件》由会员分享,可在线阅读,更多相关《实训答辩安卓点餐系统ppt课件(13页珍藏版)》请在人人文库网上搜索。1、quiky,diet,Contents,背景,设计思想,产品优势,产品概述,功能介绍,伴随着我国市场经济的高度发展,企业越来越依赖于市场和客户,而如今的餐饮业大都以实际门面形式来进行宣传和交流,作为网络普及化的社会,它还缺少了许多更为现代化的元素,餐饮业是一…

    2022年6月19日
    24
  • 关于整型转字符串的三种方法[通俗易懂]

    关于整型转字符串的三种方法[通俗易懂]首先声明,我写博客很大程度是为了记录和分享我的编程之路,如果后来人是在百度上面搜到我的文章,动机不是为了知识本身,而是为了应付题目的话,我话摆在这里,借鉴可以,但是一定要转化成自己的知识,不要只抄,然后没弄懂,那还不如直接花钱请人帮你做了,我一直秉持的原则就是,你真不想干某件事,而这件事又在你看来是没有意义的话,倒还不如用钱解决,说白了就是用钱买时间,没有必要在一些对你没有意义的地方花过多时间,倒还不如用这么点时间去做一些更有意义的事情。众所周知,C语言是一门很基础的入门语言,相对于python这些脚本语

    2022年10月19日
    11
  • 初试JqueryEasyUI(附Demo)[通俗易懂]

    初试JqueryEasyUI(附Demo)[通俗易懂]写在前面准备布局Layout菜单树Tree内容页Tabs右键菜单Menu表单Form对话框Dialog示例Demo下载关于easyui不多说,对于我们这样没有美术功底的程序员来说,简直是大大的福利,

    2022年7月1日
    19
  • DeepLink的实现原理「建议收藏」

    DeepLink的实现原理「建议收藏」前言之前我们又是看源码又是研究动画,今天分享一个比较简单的技术点:DeepLink。DeepLink,深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本。简单的介绍DeepLink概念之后,我们看一个实际的例子:朋友通过京东分享给我一个购物链接:于是我通过微信打开了这条链接:…

    2022年6月23日
    64
  • qt 当前窗口句柄_QT获取窗口句柄

    qt 当前窗口句柄_QT获取窗口句柄mac安装paramiko$brewinstallopenssl$/usr/local/opt/openssl/bin/c_rehash$exportARCHFLAGS=”-archx86_64&q…用Canvas制作剪纸效果在做剪纸效果之前,先介绍剪纸效果运用到的一些知识:1.阴影:在Canvas之中进行绘制时,可以通过修改绘图环境中的如下4个属性值来指定阴影…

    2022年7月14日
    19
  • linux 下JDK卸载与安装

    linux 下JDK卸载与安装卸载:java-versionjavajavac判断jdk是否安装(显示版本号等信息,说明已经安装)whichjava(查看JDK的安装路径) rm-rfJDK地址(卸载JDK)  rm-rf/usr/java/jdk/jdk1.8.0_172/java-versionjavajavac查看是否卸载完毕vi命令编辑文件profile vi/etc/profile删除配置的环境变量…

    2022年6月15日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号