Spring数据访问层管理 ▎集成MyBatis ▎AOP ▎事务管理 ▎SpringWeb配置

本文主要是介绍Spring数据访问层管理 ▎集成MyBatis ▎AOP ▎事务管理 ▎SpringWeb配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

在现代软件开发中,数据访问层的管理至关重要。Spring框架凭借其模块化结构和易用性,成为Java EE开发的首选。本文将探讨Spring在数据访问层的管理、MyBatis的集成、面向切面编程(AOP)、事务管理和Spring Web配置。

数据访问层连接应用与数据库,需关注效率和可维护性。我们将讨论如何使用Spring的JdbcTemplate和Spring Data实现数据库操作。MyBatis作为灵活的持久层框架,我们将介绍其在Spring项目中的集成方式。

AOP实现关注点分离,能将日志和安全等横切关注点与业务逻辑解耦,提高代码可重用性。我们还将讲解如何在Spring中管理事务,以确保数据一致性和完整性。

最后,我们将介绍Spring Web模块的配置方法,包括MVC架构和RESTful API的搭建,帮助开发者快速创建高效的Web应用。通过这些探讨,读者将能有效利用Spring技术提升应用开发能力。

Spring数据访问管理

引入 Spring JDBC 模块的依赖配置以及阿里巴巴的数据库连接管理组件 Druid 

        <!-- 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>

注:我们仍然需要引入sql jar包

Spring管理阿里巴巴数据源

   <!--阿里巴巴数据库连接管理对象,负责生成数据库连接对象,以及提供数据库连接池功能让Spring管理阿里巴巴数据库连接对象--><bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property><property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai"></property><property name="username" value="root"></property><property name="password" value="root"></property><property name="initialSize" value="10"></property><!--初始化连接数量--><property name="maxActive" value="20"></property><!--最大连接数量--></bean>

Spring集成MyBatis

第一步:导入jar包

        <!-- Spring和MyBatis结合--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>

注:也需要导入MyBatis jar包

配置 sqlSessionFactory

    <!--spring管理生成SqlSessionFactory对象 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidDataSource"></property> <!-- 注入数据源--><property name="configLocation" value="classpath:mybatis.xml"></property> <!-- MyBatis配置文件--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"> <!-- 扫描mapper映射文件--></property></bean>

配置dao包下的所有代理对象

    <!-- 生成dao包下所有的代理对象--><bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.kid.ssm.dao"></property>   <!--接口所在的包--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>

AOP

AOP 为 Aspect Oriented Programming 的缩写 ,意为:面相切面编程

面相切面编程:面相切面编程是对面向对象编程的补充延续

面向切面编程思想:是将程序中非业务代码(提交事物,打印日志,权限验证,统一异常处理)提取分离出来,然后通过代理对象,然后在调用业务代码时,通过一个代理对象帮助我们调用这些提取出来的非业务代码,这样在业务代码中就不用显示调用非业务代码,做到了业务代码和非业务代码的分离,降低了耦合度

好处:模块之间的耦合度降低

原理:动态代理模式,给业务代码生成代理对象

AOP的基本概念

  1. 连接点:类中可以被增强(加功能)的方法
  2. 切入点:类中实际被增强的方法
  3. 通知:通知是指一个切面在特定的连接点要做的事情(增强的功能).通知分为方法执行前通知,方法执行后通知,环绕通知等
  4. 目标:代理的目标类(连接点和切入点所在的类)
  5. 代理:向目标对象 应用通知时 创建的代理对象

SpringAOP实现

第一步:引入jar包

        <!-- Spring AOP --><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.2.RELEASE</version></dependency>

第二步:代码实现(通知实现)

常用通知类型

  1. @Before   前置通知  在业务代码之前执行
  2. @After      后置通知  在业务代码之后执行(即使业务代码出现异常也执行)
  3. @AfterReturnning  返回通知  在业务代码执行完后执行(业务代码出现异常不执行)
  4. @AfterThrowing     异常通知  在业务代码出现异常执行
  5. @Around                环绕通知  方法执行前后都有通知

代码演示:

("execution(* com.kid.springpro.Dao.AdminDao.*.*(..))") --->执行通知的方法

@Before]

@Before("execution(* com.kid.springpro.Dao.AdminDao.*.*(..))")public void printLog() {System.out.println("打印日志");}

@AfterThrowing

@AfterThrowing(value = "execution(* com.kid.springpro.Dao.AdminDao.*.*(..))",throwing = "throwable")public void exception(Throwable throwable){System.out.println("系统忙" +throwable.getMessage());throwable.printStackTrace();}

注:前四个通知都类似

 @Around :的执行顺序主要更具自己的定义编写,如下方代码

@Around(value = "execution(* com.kid.springpro.Dao.AdminDao.*(..))")public void around(ProceedingJoinPoint joinPoint){try {System.out.println("前置通知");joinPoint.proceed();System.out.println("返回通知");} catch (Throwable throwable) {throwable.printStackTrace();System.out.println("异常通知");}System.out.println("后置通知");}

joinPoint.proceed();----->业务代码 

代码解释 

Spring事务管理

事务管理:本质上是数据库提供的一种管理机制

    数据库事务管理  是对一次数据库操作过程中,执行的多条语句进行的管理,确保这一次操作过程中的多条sql要么都执行成功,要么都不执行,从而保证数据的一致性

转账: sql1 A-500  Sql2 B+500 确保转账数据的一致

Spring事务管理是spring框架对事物提交这以功能进行封装,程序员在业务开发中不需要显示的提交事务

Spring事物管理

1.编程式事务管理

在项目中很少使用,这种方式我们需要在代码中需要提交事务或回滚 事务时自己写代码实现

2.声明式事务管理

声明事务底层使用AOP思想,可以为方法添加事务功能,他的控制是方法级别的

事务管理的配置

配置spring管理器

    <!-- 配置 spring 事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="druidDataSource"></property></bean>

id为数据库管理的id,即下方id

    <!--阿里巴巴数据库连接管理对象,负责生成数据库连接对象,以及提供数据库连接池功能让Spring管理阿里巴巴数据库连接对象--><bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property><property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai"></property><property name="username" value="root"></property><property name="password" value="root"></property><property name="initialSize" value="10"></property><!--初始化连接数量--><property name="maxActive" value="20"></property><!--最大连接数量--></bean>

 开启注解事务管理

<!-- 开启注解事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

 开启事务管理:在类或方法上使用@Transactional 标签即可

声明事务失败的场景:

  1. 用在了非public的方法上(权限不够)
  2. 方法中的异常被捕获,会认为方法没有出现异常,事务还会提交
  3. 方法中出现了编译器异常,还是会提交事务
  4. 数据库引擎不支持事务 mysql中只有innodb支持事务

解决失败场景的第三:

@Transactional(rollbackFor = Exception.class)

SpringWeb配置

导入jar包

        <!--Spring web--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version></dependency>

在web.xml文件中位置spring核心分发器

    <servlet><servlet-name>application</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><!-- 请求映射 --><servlet-mapping><servlet-name>application</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

在spring.xml文件中开启SpringWeb注解

<mvc:annotation-driven></mvc:annotation-driven>



 感谢大家的观看,本次分享就到这里。希望我的内容能够对您有所帮助。创作不易,欢迎大家多多支持,您的每一个点赞都是我持续更新的最大动力!如有不同意见,欢迎在评论区积极讨论,让我们一起学习、共同进步!如果有相关问题,也可以私信我,我会认真查看每一条留言。期待下次再见!

                                       希望路飞的笑容可以治愈努力路途中的你我!

博主vx:Dreamkid05 --->欢迎大家和博主讨论问题 

这篇关于Spring数据访问层管理 ▎集成MyBatis ▎AOP ▎事务管理 ▎SpringWeb配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1119187

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加