SSM学习笔记三:Spring框架技术(下)

主要内容:IOC与AOP在Spring中的应用(JDBC模板、事务管理)、Spring与MyBatis整合

一、Spring与Dao

Spring与Dao部分,是Spring的两大核心技术IoC与AOP的典型应用体现:
(1)对于JDBC模板的使用,是IoC的应用,是将JDBC模板对象注入给了Dao层的实现类。
(2)对于Spring的事务管理,是AOP的应用,将事务作为切面织入到了Service层的业务方法中。

1.1 JDBC模板的实现

为了避免直接使用JDBC而带来的复杂且冗长的代码,Spring提供了一个强有力的模板类—JdbcTemplate来简化JDBC操作。并且,数据源DataSource对象与模板JdbcTemplate对象均可通过Bean的形式定义在配置文件中,充分发挥了依赖注入的威力。

1.1.1 导入Jar包

1.1.2 搭建测试环境

(1)定义实体类User
(2)定义数据库及表
(3)定义持久化接口IUserDao
(4)定义持久化接口实现类UserDaoImpl
(5)定义业务逻辑接口IUserService
(6)定义业务逻辑接口实现类UserServiceImpl

1.1.3 数据源的配置

使用JDBC模板,首先需要配置好数据源,数据源直接以Bean的形式配置在Spring配置文件中。根据数据源的不同,其配置方式不同。三种常用数据源是:Spring默认的数据源、DBCP数据源、C3P0数据源。

(1)Spring默认的数据源DriverManagerDataSource

在这里插入图片描述

(2)DBCP数据源BasicDataSource

在这里插入图片描述

(3)C3P0数据源ComboPooledDataSource

在这里插入图片描述

1.1.4 可以选择从属性文件读取数据库连接信息

在这里插入图片描述
在这里插入图片描述

1.1.5 配置JDBC模板

在这里插入图片描述
注意:JDBC模板对象是多例的
即系统会为每一个使用模板对象的线程(方法)创建一个JdbcTemplate实例,并且在该线程(方法)结束时,自动释放JdbcTemplate实例。所以在每次使用JdbcTemplate对象时,都需要通过getJdbcTemplate()方法获取。

1.1.6 Dao实现类继承JdbcDaoSupport类

JdbcDaoSupport类中有一个属性JdbcTemplate,用于接收JDBC模板。所以Dao实现类继承了JdbcDaoSupport类后,也就具有了JDBC模板属性。在配置文件中,只要将模板对象注入即可。
在这里插入图片描述

1.1.7 对DB的增、删、改操作

JdbcTemplate类中提供了对DB进行修改、查询的方法。Dao实现类使用继承自JdbcDaoSupport的getTemplate()方法,可以获取到JDBC模板对象。对DB的增、删、改都是通过update()方法实现的。
在这里插入图片描述

1.1.8 对DB的查询操作

JDBC模板的查询结果均是以对象的形式返回。根据返回对象类型的不同,可以将查询分为两类:简单对象查询,与自定义对象查询。

(1)简单对象查询

查询结果为String、Integer等简单对象类型,或该类型做为元素的集合类型,如List等。
在这里插入图片描述

(2)自定义对象查询

查询结果为自定义类型,如User等,或该类型做为元素的集合类型,如List等。
在这里插入图片描述
在这里插入图片描述

1.2 Spring与事务管理

事务是访问数据库的一个操作序列,DB应用系统通过事务集来完成对数据的存取。
事务原本是数据库中的概念,在Dao层。但一般情况下,需要将事务提升到业务层,即Service层。这样做是为了能够使用事务的特性来管理具体的业务。
在Spring中通常可以通过以下三种方式来实现对事务的管理:使用Spring的事务代理工厂管理事务、使用Spring的事务注解管理事务、使用AspectJ的AOP配置管理事务。

1.2.1 Spring事务管理API

(1)事务管理器接口

事务管理器是PlatformTransactionManager接口对象。其主要用于完成事务的提交、回滚,及获取事务的状态信息。

PlatformTransactionManager接口有两个常用的实现类
DataSourceTransactionManager:使用JDBC或iBatis 进行持久化数据时使用。
HibernateTransactionManager:使用Hibernate进行持久化数据时使用。

Spring事务的默认回滚方式是:发生运行时异常时回滚,发生受查异常时提交。不过,对于受查异常,程序员也可以手工设置其回滚方式。

(2)事务定义接口

事务定义接口TransactionDefinition中定义了事务描述相关的三类常量:事务隔离级别、事务传播行为、事务默认超时时限,及对它们的操作。

定义了五个事务隔离级别常量
DEFAULT:采用DB默认的事务隔离级别。MySql的默认为REPEATABLE_READ; Oracle默认为READ_COMMITTED。
READ_UNCOMMITTED:读未提交。未解决任何并发问题。
READ_COMMITTED:读已提交。解决脏读,存在不可重复读与幻读。
REPEATABLE_READ:可重复读。解决脏读、不可重复读,存在幻读
SERIALIZABLE:串行化。不存在并发问题。

定义了七个事务传播行为常量
REQUIRED:指定的方法必须在事务内执行。若当前存在事务,就加入到当前事务中;若当前没有事务,则创建一个新事务。这种传播行为是最常见的选择,也是Spring默认的事务传播行为。

定义了默认事务超时时限
该值一般就使用默认值即可。

1.2.2 使用Spring的事务代理管理事务(XML方式)

该方式是,需要为目标类,即Service的实现类创建事务代理。事务代理使用的类是TransactionProxyFactoryBean,该类需要初始化如下一些属性:transactionManager:事务管理器、target:目标对象,即Service实现类对象、transactionAttributes:事务属性设置

(1)在容器中添加事务管理器DataSourceTransactionManager

在这里插入图片描述

(2)在容器中添加事务代理TransactionProxyFactoryBean

在这里插入图片描述

(3)测试类

在这里插入图片描述

1.2.3 使用Spring的事务注解管理事务

通过@Transactional注解方式,也可将事务织入到相应方法中。而使用注解方式,只需在配置文件中加入一个tx标签,以告诉spring使用注解来完成事务的织入。

(1)在容器中添加事务管理器

在这里插入图片描述

(2)在Service实现类方法上添加注解

在这里插入图片描述

(3)修改配置文件内容

在这里插入图片描述

(4)测试类

由于配置文件中已不存在事务代理对象,所以测试类中要从容器中获取的将不再是事务代理对象,而是原来的目标对象。

1.2.4 使用AspectJ的AOP配置管理事务(重点)

使用XML配置顾问方式可以自动为每个符合切入点表达式的类生成事务代理。

(1)在容器中添加事务管理器

在这里插入图片描述

(2)配置事务通知

为事务通知设置相关属性。用于指定要将事务以什么方式织入给哪些方法。
在这里插入图片描述

(3)配置顾问

在这里插入图片描述

二、Spring与MyBatis整合

将MyBatis与Spring进行整合,主要解决的问题就是将SqlSessionFactory对象交由Spring来管理。所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注解在Spring容器中,再将其注入给Dao的实现类即可完成整合。整合方法有两种:Mapper动态代理、支持扫描的Mapper动态代理。

2.1 Mapper动态代理方式实现过程

2.1.1 导入Jar包

2.1.2 定义映射文件Mapper

映射文件命名为IStudentDao.xml
在这里插入图片描述

2.1.3 定义MyBatis主配置文件

在这里插入图片描述

2.1.4 修改Spring主配置文件

在这里插入图片描述

2.2 支持扫描的Mapper动态代理实现过程

实现过程与Mapper动态代理方式类似,只是在生成Dao代理对象时有区别。

2.2.1 修改Spring主配置文件

在这里插入图片描述
Spring与MyBatis整合时有一种奇怪的现象,就是Dao层的命名建议是以两个大写字母开头;如果开头只有一个大写字母,注册service时ref的命名首字母要小写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java SSMSpring+SpringMVC+MyBatis)是一种基于Java语言的Web开发框架学习这个框架的过程中,我深刻体会到它的强大和灵活性。 首先,Spring框架为开发者提供了一个强大的IOC(Inversion of Control)容器,它能够管理和注入对象,减少了代码之间的耦合性。通过配置文件或注解,我们可以轻松地定义和获取各种对象,提高了代码的可维护性和可扩展性。 其次,SpringMVC框架是一种MVC(Model-View-Controller)设计模式的实现,它用于处理Web请求和响应。通过配置一个请求映射表和处理器,我们可以将请求分发给相应的控制器进行处理,并将处理结果返回给客户端。SpringMVC还提供了一些便捷的注解和标签,用于简化页面的渲染和参数的绑定。 最后,MyBatis是一种优秀的持久化框架,它能够将数据库操作与Java对象之间的映射简化为简单的配置。通过编写SQL映射文件和定义POJO(Plain Old Java Object)类,我们可以方便地进行数据库的增删改查操作,而无需编写冗长的SQL语句。 在学习Java SSM框架的过程中,我深入理解了软件开发过程中的MVC思想,并学会了如何利用SpringSpringMVC和MyBatis来实现一个完整的Web应用程序。通过不断的实践和调试,我逐渐培养了自己解决问题和调试代码的能力。 总结起来,学习Java SSM框架使我深入理解了软件开发的各个环节,并提升了我的编码能力和开发效率。我相信这些知识和经验将对我的职业发展和项目实施起到积极的促进作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值