Spring与Mybatis整合

news/2025/3/31 22:21:58/

持久层整合

1.Spring框架为什么要与持久层技术进行整合

JavaEE开发需要持久层进行数据库的访问操作

JDBC Hibernate Mybatis进行持久层开发存在大量的代码冗余

Spring基于模板设计模式对于上述的持久层技术进行了封装

2.Mybatis整合

SqlSessionFactoryBean MapperScannerConfigure

Spring与Mybatis整合

1.Mybatis开发步骤的回顾

1.实体

2.实体别名

3.表

4.创建DAO接口

5.实现Mapper文件

6.注册Mapper文件

7.MybatisAPI调用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/db03?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="EmpMapper.xml"/></mappers>
</configuration>

1.实体

2.实体别名  配置繁琐

3.表

4.创建DAO接口 

5.实现Mapper文件

6.注册Mapper文件 配置繁琐(一个Dao就需要配置一个)

7.MybatisAPI调用 代码冗余

 Spring与Mybatis整合思路分析

编码步骤

1.搭建开发环境(jar)

 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.14.RELEASE</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.18</version></dependency>

applicationContext.xml

java"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--        连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="jdbc:mysql://localhost:3306/db03?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/><property name="driverClassName" value="com.mysql.jdbc.Driver"/></bean>
<!--    创建sqlSessionFactory SqlSessionFactoryBean--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations"><list><value>classpath:mybatis.mapper/*Mapper.xml</value></list></property></bean>
<!--    创建DAO对象 MapperSannerConfigure--><bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="mybatis.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>
</beans>

Spring与Mybatis细节

Spring与Mybatis整合后,为什么Dao不提交事务,但是数据能查询并插入的数据库?

本质上控制连接对象(Connection)--->连接池(DataSource)

1.Mybatis提供的连接池对象 --->创建Connection

         Connection.setAutoCommit(false) 手工的控制了事务 操作完成后,手动提交

2.Druid(C3P0 DBCP)作为连接池  ->>>创建Connection

        Connection.setAutoCommit(true) true为默认值 保存自动控制事务 一条sql 自动提交

回答:Spring与Mybatis整合,引入了外部连接池对象,保持自动事务提交这个机制(Connection.setAutoCommit(true))不需要手动提交,自动提交事务

未来实战中,还会手工控制事务,多条Sql一起成功 一起失败 后续Spring通过事务控制解决这个问题


http://www.ppmy.cn/news/1583967.html

相关文章

3ds Max 2026 新功能全面解析

一、视口性能与交互体验升级 1. Hydra 2.0 视口渲染引擎 3ds Max 2026 引入了 Hydra 2.0&#xff0c;大幅优化了视口渲染性能&#xff0c;尤其是在处理复杂场景和高质量实时预览时&#xff0c;流畅度提升显著。 支持USD&#xff08;通用场景描述&#xff09;格式&#xff0c…

初识Qt(一)

本文部分ppt、视频截图原链接&#xff1a;萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频 1. Qt是什么&#xff1f; Qt是一个跨平台的C应用程序开发框架&#xff0c;它既为图形用户界面(GUI)程序开发提供了强大支持&#xff0c;也能用于开发非GUI的控制台程序、服务端…

Java EE——线程状态

前言 从编写Java代码的角度来说&#xff0c;线程一共有六种状态&#xff1b;但是以操作系统的视角来看&#xff0c;线程状态可以分为物种 六种划分 调用getState()方法获取当前线程状态 一.NEW 定义&#xff1a;线程(对象)被创建但还没有启动 public class NEW {public st…

k近邻算法K-Nearest Neighbors(KNN)

算法核心 KNN算法的核心思想是“近朱者赤&#xff0c;近墨者黑”。对于一个待分类或预测的样本点&#xff0c;它会查找训练集中与其距离最近的K个样本点&#xff08;即“最近邻”&#xff09;。然后根据这K个最近邻的标签信息来对当前样本进行分类或回归。 在分类任务中&#…

ElasticSearch -- 部署完整步骤

前期准备 创建用户&#xff1a; sudo useradd hadoop sudo passwd hadoop# 密码 xxx系统层面&#xff0c;禁用内存交换 sudo swapoff -a修改 sudo vi /etc/security/limits.conf hadoop hard memlock unlimited hadoop soft memlock unlimited hadoop soft nofile 65536 had…

【bug解决】NameError: name ‘fused_act_ext‘ is not defined

问题 使用basicsr库做超分的时候发现NameError: name fused_act_ext is not defined这个问题&#xff0c;一直不断重复的使用pip uninstall basicsr 和 BASICSR_EXTTrue pip install basicsr 发现一直没有执行编译过程&#xff0c;导致一直推理失败 原因 之前已经安装过basi…

【Python3教程】Python3基础篇之Lambda(匿名函数)

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

Redis 中的过期策略和内存淘汰策略

过期策略 Redis 的 过期策略&#xff08;Expiration Policy&#xff09;决定了 如何管理和删除已过期的 key&#xff0c;确保内存资源的合理使用。Redis 提供了 三种过期策略&#xff1a; 1. 惰性删除&#xff08;Lazy Deletion&#xff09; 特点&#xff1a;只有当客户端访问…