spring 学习笔记(day-03)

目录

 

一、AOP 的注解方式

二、Spring 的 JDBC 模板

三、使用 Spring 整合第三方数据源

四、JDBC 模板的使用

五、事务

 

附:关于 MySQL 8 的使用


一、AOP 的注解方式

1.定义切面类

        @Aspect 用来定义当前类是切面类。

2.定义通知类型

        @Before

        @AfterReturing

        @Around

        @After

        @AfterThrowing

3.步骤

1)新建 MyAspect 切面类,然后在切面类上面,使用 @Aspect 注解标注当前类是切面类。

@Component(value = "myAspect")
@Aspect
public class MyAspect {
}

2)新建 UserDao 接口类和 UserDaoImpl 实现类。并添加 save 和 update 方法。

@Override
public void save() throws Exception {
	System.out.println("我是 save() 方法");
}
	
@Override
public void update() throws Exception {
	System.out.println("我是 update() 方法");
}

3)在切面类中,添加对应的增强方法。

// 作为前置通知,切入到某个指定的方法中,进行增强
@Before(value = "execution(public void com.neuedu.dao.impl.UserDaoImpl.save())")
public void hello() {
	System.out.println("我是增强后的内容..");
}

@Around(value = "execution(public void com.neuedu.dao.impl.UserDaoImpl.update())")
public void arround(ProceedingJoinPoint joinpoint) {
	System.out.println("环绕通知 ----- 前面执行");
	try {
	    // 在中间,需要把目标对象的方法也执行一遍
		joinpoint.proceed();
        } catch (Throwable e) {
		e.printStackTrace();
	}
	System.out.println("环绕通知 ----- 后面执行");
}

4.如果切入表达式,大部分都是一样的话,则可考虑抽取处理啊,简单利用

1)先抽取出来

@Pointcut(value = "execution(public void com.neuedu.dao.impl.UserDaoImpl.save())")
public void userSave() {}
	
@Pointcut(value = "execution(public void com.neuedu.dao.impl.UserDaoImpl.update())")
public void userUpdate() {}

2)进行使用:类名.方法名()

@Before(value = "MyAspect.userSave()")

@Around(value = "MyAspect.userUpdate()")

二、Spring 的 JDBC 模板

1.简单理解 JDBC 流程

2.在数据库中,创建一张表

Create table stu (
    Id int primary key auto_increment,
    Name varchar(50),
    Age int
);

3.给项目导包,搭建环境。

1)启动包  mysql-connector-java-5.1.43-bin.jar

2)Spring 中所有相关的包:spring-jdbc、spring-tx

4.添加一个配置文件:db.properties,主要用来存储数据库连接的信息。

5.测试

public void fun1() throws Exception {
		
		// 1. 创建数据源对象
		DriverManagerDataSource ds = new DriverManagerDataSource();
		// 数据库的驱动
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		// 连接数据库的地址
		// 如果数据库是本地的话,则可以简写为:jdbc:mysql:///jss
		ds.setUrl("jdbc:mysql://127.0.0.1:33066/jss?serverTimezone=UTC");
		// 用户名
		ds.setUsername("root");
		// 密码
		ds.setPassword("1234");
		
		// 2. 创建模板类
		JdbcTemplate template = new JdbcTemplate(ds);
		
		// 3. 完成数据的添加
		template.update("insert into stu values(1, 'cuihua', 18.8)");
	}

但是,我们现在学了 Spring 之后,就不再建议大家通过 new 的方式去管理了。我们应该将所有的创建都交给 Spring 去管理。接着,我们使用 Spring 来处理数据源和模板的创建和使用。

6.编辑 spring-beans.xml 文件,添加数据源相关信息。

<!-- 将连接数据库的动作,交给 Spring 去管理 
    	以后,我们只要是配置数据源,都统一给 id 值,设置为 dataSource
    -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    	<property name="url" value="jdbc:mysql://127.0.0.1:33066/jss?serverTimezone=UTC"/>
    	<property name="username" value="root"/>
    	<property name="password" value="1234"/>
</bean>

7.编辑 spring-beans.xml 文件,添加模板相关信息。

<!-- 将 JdbcTemplate 模板交给 Spring 管理 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

8.测试

因为我们需要使用 template 模板,则需要通过注入的方式获取。

// 注入
@Resource
private JdbcTemplate template;
	
@Test
public void fun2() throws Exception {
	template.update("insert into stu values(null, ?, ?)", "花花", 1000);
}

三、使用 Spring 整合第三方数据源

其实,就跟我们在家吃饭用的碗一样,不是吃完就丢掉。而是,吃完之后洗干净消毒,然后下顿饭再拿来用。

接着,主要介绍两个比较优秀的第三方的数据源工具,这两个东西是人家把功能封装好的小框架,可以直接添加到项目中进行使用的。在使用的时候,一样是需要设置一些数据库的基本信息,然后还可以设置一些数据池中的相关量。

比如,我们学习的Hibernate 持久层框架,底层用到的数据源就是 C3P0.

1.DBCP

记得添加下面两个 jar 包:

commons-dbcp2-2.5.0-bin.zip

commons-pool2-2.6.0-bin.zip

<!-- 配置 DBCP 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:33066/jss?serverTimezone=UTC"/>
    <property name="username" value="root"/>
    <property name="password" value="1234"/>
</bean>

2.C3P0

需要添加一个 jar 包:c3p0

官网:https://www.mchange.com/projects/c3p0/ 

需要多导入 mchange-commons-java-0.2.3.4.jar 文件一起使用

注意:如果 c3p0 是跟 Spring 项目一期使用的话,则需要选择 springsource 资源中的版本。

<!-- 配置 C3P0 数据源  -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:33066/jss?serverTimezone=UTC"/>
    <property name="user" value="root"/>
    <property name="password" value="1234"/>
</bean>

四、JDBC 模板的使用

1.修改

template.update("update stu set name = ? where id = ?", "春花", 1);

2.删除

template.update("delete from stu where id = ?", 5);

3.查询一条记录

User user = template.queryForObject("select * from stu where id = ?", new BeanMapper(), 1);
System.out.println(user);

4.查询所有记录

// 方式2:查询所有的数据
List<User> list2 = template.query("select * from stu", new BeanMapper());
for (User user : list2) {
	System.out.println(user);
}
		
// 方式1: 查询所有的数据
List<Map<String, Object>> list = template.queryForList("select * from stu");
for (Map<String, Object> map : list) {
    //  map.keySet() 用于获取所有的 key
    for (String key : map.keySet()) {
        // 通过 key 获取到对应的 value 值
        System.out.print(map.get(key));
    }
    // 相当于换行效果
    System.out.println();
}

五、事务

只要记住一句话:执行意见事情,要么一期成功,要么一期不成功。

比如,转账。

A 给 B 转账 1000 块。

如果 B 收到,则 A 账户中应该少 1000。

如果 B 未收到,则 A 账户中不变。

在执行转账的时候,万一银行的系统出现故障,刚好转账进行到中段,此时只要不能完全成功,数据应该回滚到原始状态。简单理解,就是什么都没发生过。

在开发中,我们的事务处理,一般情况都建议在 Service 层中进行。

在操作事务的时候,以前的做法大致如下:

1)开启事务

2)执行事务

3)提交事务

4)如果有异常出现,则回滚事务,将数据复原

现在如果使用 Spring 来处理事务,其实非常简单。

1)配置事务管理器

 <!-- 配置事务管理器 transactionManager
    	需要跟数据源一起使用
     -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"/>
</bean>

2)开启事务驱动注解

<tx:annotation-driven transaction-manager="transactionManager"/>

3)在需要使用事务的类上(也就是 service 层),使用 @Transactional 注解即可。

注意,@Transactional 注解既可以作用在类上,也可以在类中单独的方法上实现事务。

 

附:关于 MySQL 8 的使用

 

1.安装 MySQL 8 版本需要注意的问题

参考:https://blog.csdn.net/u012278016/article/details/80539205

 

2.MySQL8 使用需要使用最新版本的驱动。

参考:mysql-connector-java-8.0.11.jar

 

3.在设置 URL 的时候

参考:"jdbc:mysql://127.0.0.1:3306/jss?serverTimezone=UTC"

猜你喜欢

转载自blog.csdn.net/weidong_y/article/details/81673585
今日推荐