导读
1.Spring整合JDBC
2.代理模式
3.使用maven工具整合SSH
Spring整合JDBC
Spring事务管理
1.平台事务管理器PlatformTransactionManager,Spring管理事务都是通过平台事务管理器
2.实现类:DataSourceTransactionManager用来管理jdbc/Mybatis/iBatis等事务
3.HibernateTransactionManager用来管理hibernate事务
4.JpaTransactionManager管理Jpa事务
要导入的jar包
spring.xml配置文件
Spring整合Jdbc
1.使用JdbcTemplate对象
2.创建JdbcTemplate对象需要注入DataSource对象
改进版:
加入:
Spring管理事务通过两类方式
⚠️在业务层控制事务
1.编程式事务管理(已不再使用)
2.声明式事务管理
(1)基于代理类的声明式事务管理(不再使用)
(2)基于aop的声明式事务管理
(3)基于注解的声明式事务管理
代理模式
1.静态代理
2.基于JDK的动态代理,是由jdk提供,要求被代理类一定得有接口
3.基于cglib的动态代理,需要引入第三方jar包,被代理类不需要有接口
4.动态代理,是在运行期动态生成一个类去代理目标类
5.Spring中的aop是基于jdk和cglib两种动态代理
静态代理
接口
ICar.java
package com.hala.test;
public interface ICar {
public void move();
}
接口实现Car.java
package com.hala.test;
public class Car implements ICar{
@Override
public void move() {
// TODO Auto-generated method stub
System.out.println("汽车在移动!");
}
}
代理类CarProxy.java
package com.hala.test;
public class CarProxy implements ICar{
private ICar car;
public CarProxy(ICar car) {
this.car=car;
}
@Override
public void move() {
// TODO Auto-generated method stub
System.out.println("开启前");
car.move();
System.out.println("开启后");
}
}
测试类 CarTest.java
package com.hala.test;
import org.junit.jupiter.api.Test;
public class CarTest {
@Test
public void move() {
ICar car1=new Car();
ICar car2=new CarProxy(car1);
car2.move();
}
// @Test
// public void test() {
// ICar car1=new Car();
// ICar car2=(ICar)new LogProxy().getObj(car1);
// car2.move();
// }
}
JDK动态代理
接口
ICar.java
package com.hala.test;
public interface ICar {
public void move();
}
接口实现Car.java
package com.hala.test;
public class Car implements ICar{
@Override
public void move() {
// TODO Auto-generated method stub
System.out.println("汽车在移动!");
}
}
代理类LogProxy.java
package com.hala.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogProxy implements InvocationHandler{
private Object obj;//目标对象(被代理类对象)
//获取代理类对象
public Object getObj(Object obj) {
this.obj = obj;
return Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}
//执行代理方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
System.out.println("记录日志开始...");
Object object=method.invoke(obj, args);
return object;
}
}
测试类 CarTest.java
package com.hala.test;
import org.junit.jupiter.api.Test;
public class CarTest {
// @Test
public void move() {
ICar car1=new Car();
ICar car2=new CarProxy(car1);
car2.move();
}
@Test
public void test() {
ICar car1=new Car();
ICar car2=(ICar)new LogProxy().getObj(car1);
car2.move();
}
}
使用maven工具整合SSH
maven和spring很像,spring是把对象放入到一个容器,需要哪个注入哪个,maven是一个jar包容器,需要哪个取哪个,让程序更小一点
mac版配置
配置maven环境变量(首先要确保java环境变量已经配置好):
1⃣️ 先双击Binary tar.gz archive文件,解压到文件目录下;(放在用户目录下就好)
2⃣️ 查看文件路径:1)首先,打开终端;
2)再将apache-maven-3.5.0 文件夹拖入到终端内,文件夹路径就会显示出来;
3⃣️ 在终端打开配置环境变量到文件:
1)在终端输入 vim ~/.bash_profile,进入到环境变量配置文件里面;
2)进入后,是read模式,按下 i (编辑)键,进入insert模式;
3)将环境变量加入其实,环境变量如下:
export MAVEN_HOME=/Users/robbie/apache-maven-3.3.3
export PATH=$PATH:$MAVEN_HOME/bin
4)按下 ESC,退出insert模式;
5)输入 :wq (保存修改)退出当前文件;
6)使修改的环境变量bash_profile文件生效,输入 source .bash_profile,按下Enter键即可.
<localRepository>/Users/你的mac名字/maven</localRepository>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置完保存,接下来配置ecplise
创建一个maven工程
完成创建后需要修改jre
然后要消除项目上的❌,这里主要是因为缺少关于servlet的jar包,以前的web项目中tomcat中自带这个jar包,现在需要自己添加
复制这段代码到下图junit位置后
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
保存后❌消失
整合SSH
maven整合SSH其实就是在上边搜servlet的网站直接搜就行,加入方法完全一样,需要什么jar包就搜什么,然后添加,包括struts2-core,hibernate-core,spring-context,spring-tx,spring-orm,jstl,c3p0等等