Spring框架知识点(三)
目录:
1.基于aspectj的注解aop操作(会用)
2.Spring的jdbcTemplate(模板)操作
(1)实现crud操作
3.Spring配置连接池
(1)配置c3p0连接池
(2)service和dao注入操作
4.Spring事务管理
(1)事务概念
(2)Spring进行事务管理api
(3)Spring进行事务配置(声明式)
— 基于xml配置文件
— 基于注解方式
基于aspectj的注解aop操作(会用)
1.使用注解方式实现aop操作
第一步 创建对象
第二步 在spring核心配置文件中,开启aop操作
第三步 在增强类上面使用注解完成aop操作
package cn.itcast.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect // 表示增强
public class MyBook {
// 在方法上面使用注解完成增强配置
@Before(value = "execution(* cn.itcast.aop.Book.*(..))") // 前置增强
public void before1() {
System.out.println("before...........");
}
}
执行结果:
Spring的jdbcTemplate操作
1.Spring框架是一站式轻量级框架
(1)针对Java三层,每一层都有解决技术方法
(2)在dao层,使用jdbcTemplate
2.Spring对各种支持的持久化技术都做了不同的封装,如下图:
(1)jdbcTemplate对jdbc进行封装
3. jdbcTemplate使用和dbutils(更方便)使用很相似,都是对数据库进行crud操作
增加
1.导入jdbcTemplate使用的jar(同时不能忘了导入数据库驱动的jar包)
2.创建对象,设置数据库信息
3.创建jdbcTemplate对象,设置数据源
4.调用jdbcTemplate对象里面的方法实现操作(增、删、修都调用update()方法)
修改
删除
查询
基于dbutils操作的查询方式:
1.使用jdbcTemplate模板实现查询操作
第一个:查询返回某一个值
调用方法:
(1)第一个参数是sql语句
(2)第二个参数是 返回类型的class
总共四条记录
第二个:查询返回对象
原始的jdbc实现代码
// jdbc实现代码
@Test
public void testJDBC() {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 建立连接
conn = DriverManager.getConnection("jdbc:mysql:///spring_day03", "root", "123456");
// 编写sql语句
String sql = "select * from user where username=?";
// 预编译sql
psmt = conn.prepareStatement(sql);
// 设置参数值
psmt.setString(1, "lucy");
// 执行sql
rs = psmt.executeQuery();
// 遍历结果集
while (rs.next()) {
// 得到返回结果值
String username = rs.getString("username");
String password = rs.getString("password");
// 放到user对象里面
User user = new User();
user.setUsername(username);
user.setPassword(password);
// 输出结果值
System.out.println(user.getUsername()+"\t"+user.getPassword());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
rs.close();
psmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用jdbcTemplate模板实现以上需求操作,调用的方法特点如下:
第一个参数是sql语句
第二个参数是RowMapper,是接口,类似于dbutils里面的接口
第三个参数是可变参数
Spring框架的jdbcTemplate模板实现查询某个返回对象时,需要自己封装的部分数据:
第三个:查询返回集合
调用方法:
(1)第一个参数是sql语句
(2)第二个参数是可变参数
(3)第三个参数是RowMapper接口,自己写类实现数据封装
Spring配置连接池和dao使用jdbcTemplate
1.Spring配置c3p0连接池
第一步 导入jar包
第二步 创建spring配置文件,配置连接池
(1)把代码在配置文件中配置
2.dao使用jdbcTemplate
(1)创建了service 和dao,配置service和dao对象,在service注入dao对象
(2)创建jdbcTemplate对象,把模板对象注入到dao里面
(3)在jdbcTemplate对象里注入dataSource
问题:测试的时候连接不上数据库,还各种报错,看似没有问题,却隐藏大量错误信息,最后更换了四个jar包,配置做了点更改就好了,还有注意点(千万不要有种字符,特别是中文空格):
<!--配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_day03"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
Spring的事务管理
Spring事务管理api
1.Spring事务管理两种方式
第一种 编程式事务管理(一般不用)
第二种 声明式事务管理(重点)
(1)基于xml配置文件实现
(2)基于注解实现(常用)
2.Spring事务管理的api
(1)接口—》PlatformTransactionManager(事务管理器)
(2)Spring针对不同的dao层框架,提供接口不同的实现类
(3)首先配置事务管理器
搭建转账环境实例
1.创建数据库表,添加数据
2.创建service 和dao类,完成注入关系
(1)service层也叫业务逻辑层
(2)dao层,单纯对数据库操作层,在dao层不添加业务
(3)需求:小王转账1000给小马(小王少1000,小马多1000。共同构成事务)
3.产生问题:
(1)如果小王少了1000之后,出现异常,小马不会多1000,钱丢失了
4.解决:
(1)添加事务解决,出现异常进行回滚操作(用配置文件或注解方式解决)
声明式事务管理(xml配置)
第一步 配置事务管理器
<!-- 第一步 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"/>
</bean>
第二步 配置事务增强
<!-- 第二步 配置事务增强 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<!-- 做事务操作 -->
<tx:attributes>
<!-- 设置进行事务操作的方法匹配规则 -->
<tx:method name="account*"/>
</tx:attributes>
</tx:advice>
第三步 配置切面
<!-- 配置切面 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.kgc.service.OrderService.*(..))"
id="pointcut1" />
<!-- 切面 -->
<aop:advisor advice-ref="txadvicez" pointcut-ref="pointcut1" />
</aop:config>
声明式事务管理(注解)
第一步 配置事务管理
<!-- 第一步 配置事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
第二步 配置事务注解
<!-- 第二步 配置事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
第三步 在要使用事务的方法所在类上面添加注解
到此,spring框架的基本学习 就结束了,还有相关的知识,在后期学习中做补充。