Spring_03---jdbcTemplate操作crud、spring事务管理

本文详细介绍了Spring框架中JdbcTemplate的操作方式,包括代码方式和配置方式的CRUD操作,以及Spring事务管理的实现,涵盖了编程式和声明式事务管理,并提供了基于XML配置和注解的事务管理示例。

一、Spring的jdbcTemplate操作(代码方式)


jdbcTemplate:spring中针对dao层的解决技术。

功能:对数据库进行crud操作,与dbutils相似。

实现原理:jdbcTemplate封装了jdbc。

知识点:spring一站式框架:针对javaee三层,每一层都有解决技术

在这里插入图片描述

增删改操作:
步骤:
	1)导入jdbcTemplate使用的jar包
	2)创建DriverManagerDataSource驱动管理数据源对象
			DriverManagerDataSource dataSource = new DriverManagerDataSource();
	3)使用数据源对象设置数据库信息(四大参数)
	4)创建jdbcTemplate对象,传参设置数据源
			JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
	5)写sql语句。
	6)调用jdbcTemplate中方法实现操作

代码示例:
	/**
	 * 增删改
	 * @author 一万年行不行
	 *
	 */
	public class CDU {
		
		//增操作
		//@Test
		public void create(){
			
			//1)导包
			//2)创建DriverManagerDataSource驱动管理数据源对象
			DriverManagerDataSource dataSource = new DriverManagerDataSource();
			
			//3)使用数据源对象设置数据库信息(四大参数)
			dataSource.setDriverClassName("com.mysql.jdbc.Driver");
			dataSource.setUrl("jdbc:mysql://localhost:3306/spring_day03");
			dataSource.setUsername("root");
			dataSource.setPassword("123456");
			
			//4)创建jdbcTemplate对象,传参设置数据源
			JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
			
			//5)写sql语句
			String sql = "insert into user value(?,?)";
			
			//6)调用jdbcTemplate中方法实现操作
			jdbcTemplate.update(sql,"zhangsan","123");
		}
		
		
		//改
		//@Test
		public void updata(){
			//1)导入jdbcTemplate使用的jar包
			//2)创建DriverManagerDataSource驱动管理数据源对象
			DriverManagerDataSource dataSource = new DriverManagerDataSource();
			
			//3)使用数据源对象设置数据库信息(四大参数)
			dataSource.setDriverClassName("com.mysql.jdbc.Driver");
			dataSource.setUrl("jdbc:mysql://localhost:3306/spring_day03");
			dataSource.setUsername("root");
			dataSource.setPassword("123456");
			
			//4)创建jdbcTemplate对象,传参设置数据源
			JdbcTemplate jdbcTamplate = new JdbcTemplate(dataSource);
			
			//5)写sql语句。
			String sql = "update user set password=? where username=?";
			
			//6)调用jdbcTemplate中方法实现操作
			jdbcTamplate.update(sql,"1234","zhangsan");
		}
		
		//删
		@Test
		public void delete1(){
			//2)创建DriverManagerDataSource驱动管理数据源对象
			DriverManagerDataSource dataSource = new DriverManagerDataSource();
			
			//3)使用数据源对象设置数据库信息(四大参数)
			dataSource.setDriverClassName("com.mysql.jdbc.Driver");
			dataSource.setUrl("jdbc:mysql://localhost:3306/spring_day03");
			dataSource.setUsername("root");
			dataSource.setPassword("123456");
			
			//4)创建jdbcTemplate对象,传参设置数据源
			JdbcTemplate jdbcTamplate = new JdbcTemplate(dataSource);
			
			//5)写sql语句。
			String sql = "delete from user where username=?";
			
			//执行sql
			jdbcTamplate.update(sql,"zhangsan");
		}
	}
三种返回结果的查询
难点:需要自己手动把结果集封装到对象中。sping中template不提供封装

RowMapper接口:按行映射ResultSet(结果集)

具体实现:
	1)写一个类,实现RowMapper接口。类中默认重写mapRow方法。
	2)在方法中:
		a.从结果集中得到属性值数据,
		b.把属性值数据封装到类中
	
	代码示例:
	//泛型为被封装的对象
	class MyRowMapper implements RowMapper<User>{
		/*
		 * 第一个参数:查询结果集
		 * 第二个参数:查询结果的行数
		 */
		@Override
		public User mapRow(ResultSet rs, int num) throws SQLException {
			
			//1)从结果集中得到属性值
			String username = rs.getString("username");
			String password = rs.getString("password");
			
			//2)封装属性值到对象中
			User user = new User();
			user.setUsername(username);
			user.setPassword(password);
			return null;
		}
	}	

1)返回值查询
在这里插入图片描述
2)返回对象查询
在这里插入图片描述
3)返回list集合查询
在这里插入图片描述

二、Spring的jdbcTemplate操作(配置方式)


使用 配置文件与连接池,实现crud
步骤:
	1)导入jar包
	2)创建spring配置文件
		3)配置连接池
		4)配置创建模板对象,注入连接池对象(向模板传入dataSource)
		5)配置创建dao对象,注入模板对象为属性
		6)配置创建service,注入dao

代码示例:
	xml:
		<!-- 1)配置连接池 -->
		<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
			<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
			<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_day03"></property>
			<property name="user" value="root"></property>
			<property name="password" value="123456"></property>
		</bean>
		
		<!-- 2)配置创建模板对象,注入连接池对象(向模板传入dataSource) -->
		<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
			<property name="dataSource" ref="dataSource"></property>
		</bean>
		
		<!-- 3)创建dao对象,注入模板对象为属性-->
		<bean id="dao" class="c3p0.Dao">
			<property name="jdbcTemplate" ref="jdbcTemplate"></property>
		</bean>
		
		<!-- 4)创建service,注入dao -->
		<bean id="service" class="c3p0.Service">
			<property name="dao" ref="dao"></property>
		</bean>
	
service与dao:	
		public class Service {
			private Dao dao;
			public void setDao(Dao dao) {
				this.dao = dao;
			}
			
			public void add(){
				dao.add();
			}
		}
		
		public class Dao {
			//创建模板属性、set方法
			private JdbcTemplate jdbcTemplate;
			public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
				this.jdbcTemplate = jdbcTemplate;
			}
			
			public void add(){
				//1)写sql语句
				String sql = "insert into user value(?,?)";
				
				//2)调用jdbcTemplate中方法实现操作
				jdbcTemplate.update(sql,"zhangsan","123");
			}
		}

三、Spring的事务管理


作用:封装了事务中所用功能。自动对方法完成事务开启、关闭、回滚等操作

spring事务管理两种方式
	1)编程式事务管理(不用)
	2)声明式事务管理

声明式事务管理的两种实现方式
	1)基于xml配置文件实现
	2)基于注解实现
声明式事务管理(xml配置)
思想:使用aop思想配置

步骤:
1)配置事务管理器
2)配置事务增强
3)配置切面

配置代码:

<!-- 1)配置事务管理器,注入dataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 2)配置事务增强 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="account*"/>
	</tx:attributes>
</tx:advice>

<!-- 3)配置切面 -->
<aop:config>
	<!-- 切入点 -->
	<aop:pointcut expression="execution(* tx.OrderService.*(..))" id="pointcut1"/>
	<!-- 切面 -->	
	<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
声明式事务管理(注解)
1)配置事务管理器
2)配置事务注解
3)在要使用事务的方法所在类上面添加注解 

<!-- 1)配置事务管理器,注入dataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 2)开启对事务管理器的注解扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

3)在要使用事务的方法所在类上面添加注解
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值