一.Spring JDB
配置两个jar包
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
在数据的.xml文件中导入属性文件:
<context:property-placeholder location="config.properties"/>
将Spring和数据库连接
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${account}"/>
<property name="password" value="${password}"></property>
<property name="initialSize" value="10"></property>
<property name="minIdle" value="5"></property>
<property name="maxWait" value="2000"></property>
<property name="maxActive" value="20"></property>
</bean>
并配置jdbc
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
就可以在类中获得jdbcTemplate对象,
常用方法为:
execute:无返回值,执行ddl,增删改
update:执行新增.修改.删除
queryForXXX:执行查询相关语句
AOP概述
通过预编译方式和运行期间动态代理实现程序功能的统一维护的,使用动态代理的方式在执行方法
前后或者出现异常的时候做加入相关的逻辑
将业务代码和非业务代码进行隔离,降低耦合度,提高可重用性,提高开发效率
面向切面编程的好处就是: 减少重复,专注业务;
注意:面向切面编程只是面向对象编程的一种补充。
适用于事务出现异常回滚事务判断权限,执行前的日志处理
关键词:
连接点(Joinpoint):类中可以被增强的方法,这个方法就被称为连接点
切入点(pointcut):类中有很多方法可以被增强,但实际中只有 add 和 update 被增了,那么
add 和 update 方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通 知分为方法执行前
通知,方法执行后通知,环绕通知等.
切面(Aspect):把通知添加到切入点的整个过程称为切面.
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象
二.stringAOP实现
1.配置
配置相关jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
基于 aspectj 的 xml 配置方式实现
<bean id="aopdemo" class="com.ff.spring.aop.AopDemo"></bean>
<aop:config>
<!-- 配置切入点 -->
<aop:pointcut expression="execution(*
com.ff.spring.service.UserService.adduser(..))" id="adduser"/>
<aop:pointcut expression="execution(*
com.ff.spring.service.UserService.*(..))" id="allmethod"/>
<!-- 配置通知和切入点 -->
<aop:aspect ref="aopdemo">
<aop:before method="savelog" pointcut-ref="adduser"/>
<aop:after method="savelog" pointcut-ref="adduser"/>
<aop:around method="aroundAdvice" pointcut-ref="adduser"/>
<aop:after-throwing method="exceptionAdvice" pointcut-ref="allmethod"
throwing="e" />
</aop:aspect>
</aop:config>
通知有五种:
前置通知:运行前触发
后置通知:运行后未出现异常才触发
最终通知:运行后无论是否异常都触发
异常通知:有异常触发
环绕通知:自己配置的
2.注解实现方式:
启动支持:
<aop:aspectj-autoproxy />
类上配置:
@Component
@Aspect
要用的方法配置相应的,并配入切入点表达式,看上方
@Before(" ")
@After(" ")
@Around(" ")
@AfterThrowing(" ")
@AfterReturning(" ")
三.事务管理行为
一个事务方法被另一个事 务方法调用时,这个事务方法应该如何进行。
七种事务传播行为:
集成Mybatis
导入jar包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
配置sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/*Mapper.xml">
</property>
</bean>
生成接口代理
<bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ff.ssm.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">
</property>
</bean>