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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M