目录
Spring JDBC
Spring 是个一站式框架:Spring 自身也提供了控制层的 SpringMVC 和 持久
层的 Spring JdbcTemplate
环境配置
Maven导入Spring JdbcTemplate 的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>
导入属性文件
<context:property-placeholder location=“config.properties”/>
管理数据源对象
<!--spring 管理与数据库链接 (数据源)-->
<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource">
<propertyname="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${uname}"></property>
<property name="password" value="${pwd}"></property>
<property name="initialSize" value="10"></property>
<property name="minIdle" value="5"></property>
<property name="maxActive" value="20"></property>
</bean>
<!--在配置文件中创建JdbcTemplate-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
</bean>
<property name="dataSource" ref="dataSource"></property>
使用JdbcTemplate
@Autowired
JdbcTemplate jdbcTemplate;
JdbcTemplate 中常用的方法
execute:无返回值,可执行ddl,增删改语句
update:执行新增、修改、删除语句;
queryForXXX:执行查询相关语句;
方法演示
@Repository
public class LogDao {
@Autowired
JdbcTemplate jdbcTemplate;
public void Savelog(){
jdbcTemplate.update("insert into log(oper_time) value (now()) ");
jdbcTemplate.update("insert into log(oper_time) value (now()) ");
}
}
AOP( 面向切面编程)
AOP概述:
AOP为AspectOrientedProgramming 的缩写,意为:面向切面编程,通过
预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP优势:
利用AOP可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的
耦合度降低,提高程序的可重用性,同时提高了开发的效率
注:面向切面编程只是面向对象编程的一种补充。
核心原理:
使用动态代理的方式在执行方法前后或者出现异常的时候做加入相关的逻辑.
AOP的基本概念
连接点(Joinpoint):类中可以被增强(添加某些功能)的方法,这个方法就被称为连接点
切入点(pointcut):类中有很多方法可以被增强,但实际中只有add和update
被增强了(添加某些功能),那么add和update方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情即(增加的功能)。
切面(Aspect):把通知添加到切入点的整个过程称为切面.(添加功能的过程)
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象
springAOP 实现
Spring 将 AspectJ (AOP框架)的对于 AOP 的实现也引入到了自己的框架中。
下载AOP相关jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
基于aspectj的xml配置方式实现
<beanid="aopdemo"class="com.ff.spring.aop.AopDemo"></bean>
<aop:config>
<!--配置切入点-->
<aop:pointcutexpression="execution(*
com.ff.spring.service.UserService.adduser(..))"id="adduser"/>
<aop:pointcutexpression="execution(*
com.ff.spring.service.UserService.*(..))"id="allmethod"/>
<!--配置通知和切入点-->
<aop:aspectref="aopdemo">
<aop:beforemethod="savelog"pointcut-ref="adduser"/>
<aop:aftermethod="savelog"pointcut-ref="adduser"/>
<aop:aroundmethod="aroundAdvice"pointcut-ref="adduser"/>
<aop:after-throwingmethod="exceptionAdvice"pointcut-ref="allmethod"
throwing="e"/>
</aop:aspect>
</aop:config>
定义的切入点表达式:
AspectJ中常用的通知有五种类型:
前置通知:方法调用前使用
后置通知:方法调用后执行
异常通知:方法出现异常是调用
最终通知:无论方法是否被调用都执行
环绕通知:具备前置通知,后置通知,异常通知,最终通知
基于注解方式的实现
注:启动AspectJ支持:aop:aspectj-autoproxy/
定义通知:
@Component
@Aspect
publicclassAOPDemo{
@Before("execution(*com.ff.spring.demo1.dao.UserDao.*(..))")
publicvoidbefore(){
System.out.println("before");
}
@After("execution(* com.ff.spring.demo1.dao.UserDao.*(..))")
publicvoidafter(){
System.out.println("after");
}
@Around("execution(* com.ff.spring.demo1.dao.UserDao.*(..))")
publicvoidaround(ProceedingJoinPointpoint)throwsThrowable{
System.out.println("start");
point.proceed();
System.out.println("end");
}
@AfterThrowing(value="execution(*
com.ff.spring.demo1.dao.UserDao.*(..))",throwing="e")
publicvoidafterthrow(Throwable){
System.out.println("afterthrow");
}
@AfterReturning("execution(* com.ff.spring.demo1.dao.UserDao.*(..))")
public void afterreturn(){
System.out.println("afterreturn");
}
}