当前位置: 首页 > news >正文

Spring如何整合MyBatis框架?使用XML及java类的配置方式

前言

 Spring文章链接:  从头到尾Spring概念,家族,核心技术使用,事务这一篇就够了!!!_千小半的博客-CSDN博客_spring最新技术

mybatis文章链接: MyBatis框架入门(含实例)_mybatis sqlsession创建和关闭_千小半的博客-CSDN博客

一、Spring整合Mybatis框架思路

 用过Mybatis的伙伴们因该知道当我们去使用Mybatis去进行数据访问时,不仅有三个重要步骤,还有三个核心对象,这里简单重温一下Spring和Mybatis:

MyBatis使用步骤:

1.创建MybatisConfig 配置文件

2.创建SQL映射文件

3.读取配置文件,获取映射器调用方法测试

MyBatis的三个核心对象:

1.SqlSessionFactoryBuider :创建SqlSessionFactory

2.SqlSessionFactory : 创建SqlSession

3. SqlSession :获取mapper映射器并调用方法

Spring IOC容器和AOP:

spring 将所有的对象都交由spring/IOC容器管理,被管理的对象都称为bean。这些bean都在spring配置文件中进行配置。

好了,小半列出上面的温习及步骤,友友们是不是想起来了Mybatis呢?那么我们最终要让spring和mybatis进行一个整合,这两个框架都有配置文件,我们该怎么把他们合二为一呢,请看下图:

IOC容器也就是spring配置文件需要配置的属性和扫描的信息:

1.SqlSessionFactoryBean : 在mybtais-spring的整合包中,可以生成一个SqlSessionFactory,而前者可以创建出SqlSession,也就自然通过mapper映射器可以调用指定方法,通过该类还可以对Mybtais进行配置别名等。

2.数据源: 通过dbcp包提供的BasicDataSource类进行数据源的一个配置.

3.数据映射器类:使用XML配置文件时,需要扫描mapper映射器,反之,使用注解扫描。

4. 事务管理器 : 在spring容器中,开启事务控制需要先通过springFramework.jdbc包下的DataSourceTransactionManager类​​​​​​​配置事务管理器,它控制着事务的开关。

以上的4个类就是需要我们在spring整合mybatis配置的bean,关于整合的配置,以下有XML和java类配置的方式

二、XML整合Mybatis

1.数据源的外部引入

数据源我们都要配置url,username等连接信息,要想达到数据源的复用性,不想每回都重新配置一遍,就可以通过properties属性文件外部引入数据源。

db.properties文件

   注意:使用spring引入外部属性文件时,前缀必须用jdbc标记。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai

- spring配置XML文件

   注意: 要想识别数据源,需要先使用以下标签扫描该数据源文件的路径

<context:property-placeholder location="db.properties"/>

开始配置!!!!

  MapperFactoryBean类:能够以配置的方式生成映射器的实现类,并注入给业务组件(类型只能是接口类型)

    <!--创建bean--><bean id="studentService" class="service.StudentServiceImpl"/><!--利用MapperFactoryBean类扫描mapper接口--><bean id="factoryBean" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="dao.StudentMapper"/></bean><!--扫描properties外部属性文件--><context:property-placeholder location="db.properties"/><!--1.配置数据源--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"p:driverClassName="${jdbc.driver}"p:username="${jdbc.username}"p:password="${jdbc.username}"p:url="${jdbc.url}"></bean><!--2.创建SqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--引用数据源--><property name="dataSource" ref="dataSource"/><!--设置实体类别名--><property name="typeAliasesPackage" value="entity"/><!--设置映射--><property name="mapperLocations" value="dao/*.xml"/><!--设置映射文件路径--><property name="configLocation" value="mybatis-config.xml"/></bean><!--3.设置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--引入数据源--><property name="dataSource" ref="dataSource"/></bean>

- 启动Spring容器
​​​

//测试类public class Test{public static void main(String[] args) {//读取spring配置文件ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");StudentService service=context.getBean("bean名称",StudentService.class);service.方法();}}

​​​​​​三、java类整合Mybatis

使用XML不仅可以配置整合文件,java类也同理。

@Configuration  //描述该类是一个配置类
@Component      //注册bean
@ComponentScan(basePackages = {"dao", "service"})   //扫描bean
@MapperScan(value = "dao")    //扫描mapper接口注入映射器
public class ApplicationConfig {/*** 配置数据源*/@Beanpublic BasicDataSource getDataSource() {BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUsername("root");dataSource.setPassword("root");dataSource.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");return dataSource;}/*** 创建SqlSessioinFactory*/@Beanpublic SqlSessionFactory sqlSessionFactory(){SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(getDataSource());PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();try {Resource[] resources = patternResolver.getResources("dao/*.xml");factoryBean.setMapperLocations(resources);ClassPathResource classPathResource = new ClassPathResource("mybatisConfig.xml");factoryBean.setConfigLocation(classPathResource);//设置别名factoryBean.setTypeAliasesPackage("entity");} catch (IOException e) {throw new RuntimeException(e);}try {return  factoryBean.getObject();} catch (Exception e) {throw new RuntimeException(e);}}/*** 配置事务管理器*/@Beanpublic DataSourceTransactionManager transactionManager(){DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(getDataSource());return  transactionManager;}

相关文章:

Spring如何整合MyBatis框架?使用XML及java类的配置方式

前言 Spring文章链接: 从头到尾Spring概念&#xff0c;家族&#xff0c;核心技术使用&#xff0c;事务这一篇就够了&#xff01;&#xff01;&#xff01;_千小半的博客-CSDN博客_spring最新技术 mybatis文章链接: MyBatis框架入门(含实例)_mybatis sqlsession创建和关闭_千小…...

第七届蓝桥杯省赛——8冰雹数(递归)

题目&#xff1a;任意给定一个正整数N&#xff0c;如果是偶数&#xff0c;执行&#xff1a; N / 2如果是奇数&#xff0c;执行&#xff1a; N * 3 1生成的新的数字再执行同样的动作&#xff0c;循环往复。通过观察发现&#xff0c;这个数字会一会儿上升到很高&#xff0c;一会…...

Android 10.0 设置静态ip重启后获取不到ip的修复

1.概述 在定制化开发中,对于设置静态ip以后可以正常使用,但是遇到一个新问题 就是开机以后,获取不到ip 地址,这就有点不正常了,获取不到ip 就自然连不上网了,所以要分析问题所在解决问题 2.设置静态ip重启后获取不到ip的修复的核心代码 frameworks/opt/net/ethernet/java…...

mysql笔记

基础 概念 数据库体系结构的三级模式为&#xff1a;外模式、概念模式和内模式。 内模式&#xff1a;存储模式&#xff0c;对数据的物理结构和存储方式的描述。提供数据定义语言定义的。如顺序还是索引存储&#xff08;将概念模式定义的数据进行组织存储&#xff0c;达到较好…...

华为OD机试 - 最多等和不相交连续子序列(Python)| 真题+思路+考点+代码+岗位

最多等和不相交连续子序列 题目 给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。 数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。 求一组连续子序列,组内子序列的数目最多。输出这个数目。 输入 第一行输入为…...

第四届宁波网安市赛训练题

Crypto 散乱的密文 8fd4a4c94gf15{50}l72d3提示了2 1 6 5 3 4&#xff0c;我们直接横向排列 2165348fd4a4c94gf15{50}l72d3 按顺序竖着抄下来fc1l84f}a45dg034{2d957,然后栅栏解密&#xff0c;注意这里是W型栅栏解密&#xff0c;行数6 flag:flag{52048c453d794df1} 综合解密…...

Windows中MySQL 8.x版本忘记密码如何重设

Windows中MySQL 8.x版本忘记密码如何重置 文章目录Windows中MySQL 8.x版本忘记密码如何重置一、前言二、重置密码操作1、停止MySQL服务2、以安全模式启动MySQL服务3、无密码登录mysql4、重置登录密码5、验证密码是否重置成功三、最后我想说一、前言 好久之前在电脑下载的MySQL…...

【信管12.1】信息文档管理与配置管理

信息文档管理与配置管理对于项目管理来说&#xff0c;文档非常重要&#xff0c;如果是传统的工程行业项目的话&#xff0c;仅仅标书就是几百上千页的。相对来说&#xff0c;其实信息系统开发项目已经好很多了。另外就是配置项&#xff0c;它是比文档更大的一个概念&#xff0c;…...

一文搞懂Linux的标准输出/错误重定向

前言 今天在写一个脚本时&#xff0c;需要将shell命令和可执行程序的输出重定向在某一个log文件中&#xff0c;但是遇到了点小问题&#xff0c;索性就研究下输出重定向到底怎么回事。 Linux系统&#xff0c;有一个非常重要概念&#xff0c;就是一切皆文件。在使用shell脚本时&a…...

【OJ】计数的梦

&#x1f4da;Description: Bessie 处于半梦半醒的状态。过了一会儿&#xff0c;她意识到她好像在数羊&#xff0c;不能入睡。Bessie的大脑反应灵敏&#xff0c;仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码&#xff1a;每一个数码在计数的过程中出现过多少次…...

【项目实战】MySQL使用CONCAT字符串拼接函数实现与特殊字符的拼接

一、需求说明 因为有新功能需要上生产环境&#xff0c;总有一些乱七八糟的兼容历史数据的活要去做&#xff0c;比如以下。 需要批量的更新数据库中某个字段&#xff08;如id列中原来是ABCDEFG&#xff0c;需要改成[“ABCDEFG”]&#xff09;&#xff0c; 没错&#xff0c;就是…...

OpenCV实战(11)——形态学变换详解

OpenCV实战&#xff08;11&#xff09;——形态学变换详解0. 前言1. 腐蚀和膨胀运算1.1 腐蚀和膨胀基础1.2 使用形态学滤波器执行图像腐蚀和膨胀运算2. 开运算和闭运算2.1 使用形态学滤波器执行图像开运算和闭运算3. 形态学变换应用3.1 使用形态学滤波器检测边缘3.2 使用形态学…...

SPI协议详解(Standard SPI、Dual SPI和Queued SPI)

1、标准SPI 1.1、SPI接口的引脚 (1)SCLK&#xff1a;时钟线&#xff1b; (2)MOSI(master output slave input)&#xff1a;主设备输出&#xff0c;从设备输入&#xff0c;单向传输&#xff1b; (3)MISO(master input slave output)&#xff1a;主设备输入&#xff0c;从设备输…...

【代码随想录二刷】Day15-二叉树-C++

代码随想录二刷Day15 今日任务 层序遍历 226.翻转二叉树 101.对称二叉树 语言&#xff1a;C 层序遍历 102.二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root NULL) …...

C++为什么能重夺年度语言?

目录一、爷青回1、年初依旧很多大新闻&#xff0c;其中一条就是TIOBE把年度编程语言颁给了C。2、这是什么概念&#xff1f;那一年Java的流行指数是14%。二、C为什么衰落三、C为什么重新流行1、C为什么重新流行起来了呢&#xff1f;2、C究竟做对了什么呢&#xff1f;3、根本原因…...

视频监控实时接入——以海康威视为例(2023.2.16)

海康威视实时视频监控接入学习 2023.2.16引言1、视频协议简介1.1 RTSP——Real Time Streaming Protocol&#xff08;实时流传输协议&#xff09;1.2 RTMP——Real Time Messaging Protocol&#xff08;实时消息传输协议&#xff09;1.3 HLS——HTTP Live Streaming&#xff08…...

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统是什么。

1. 推荐算法的初步理解 如果说互联网的目标就是连接一切,那么推荐系统的作用就是建立更加有效率的连接,推荐系统可以更有效率的连接用户与内容和服务,节约了大量的时间和成本。 1.1 推荐系统主要解决问题 任务一:挖掘长尾:帮助用户找到想要的物品(音乐、商品、新闻),…...

新手小白入门必看!如何批量注册Twitter账号?

Twitter是目前海外比较流行的社媒营销平台&#xff0c;所以很多从事跨境电商行业的朋友都需要利用多个Twitter账号来推广营销&#xff0c;但是注册和管理多个Twitter账号其实并不是简单的事情。龙哥将会在这里详细讲讲该如何批量注册并且让这些账号不会因为关联被封号&#xff…...

虚拟环境的创建以及labelme的使用教程

本来打算是将这两部分分开的&#xff0c;但写完虚拟环境的创建似乎字数太少了&#xff0c;不过二者有关联&#xff0c;所以就放一起了。简单介绍一下&#xff0c;虚拟环境的创建有win11系统已经Ubuntu系统&#xff0c;labelme教程包括了下载及其使用的全部流程&#xff0c;以及…...

CSS中的BFC详细讲解(易懂)

带你用最简单的方式理解最全面的BFC~~~1.先了解最常见定位方案普通流元素按照其在 HTML 中的先后位置至上而下布局行内元素水平排列&#xff0c;直到当行被占满然后换行&#xff0c;块级元素则会被渲染为完整的一个新行所有元素默认都是普通流定位浮动元素首先按照普通流的位置…...

三步搞定B站4K视频下载:从新手到高手的完整指南

三步搞定B站4K视频下载&#xff1a;从新手到高手的完整指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法离线观看B站精彩…...

AI写专著全攻略:从构思到完稿,快速生成20万字专著

学术专著写作困境与AI工具解决方案 学术专著的生命力源于其逻辑的严谨性&#xff0c;但在写作过程中&#xff0c;逻辑论证往往是最容易出现问题的部分。专著的写作必须围绕核心观点展开系统的论证&#xff0c;要不仅深入阐述每一个论点&#xff0c;还需要应对来自不同学派的争…...

环境配置与基础教程:保姆级教程:VS Code DevContainer 一键构建可复现的 YOLO 训练开发容器

摘要 你是否还在为YOLO训练环境的搭建而焦头烂额?CUDA版本不匹配、Python依赖冲突、团队协作时“在我机器上能跑”的经典难题——这些问题浪费了无数开发者的宝贵时间。本文将带你通过VS Code DevContainer技术,一键构建完全可复现的YOLO训练开发容器,彻底告别环境配置噩梦…...

优化敏感焦虑型依恋

用几个学科的顶层思维&#xff0c;把你的问题重新教育一遍&#xff1a;你不是要“变得迟钝”&#xff0c;你是要完成一次升级&#xff1a;从“敏感地寻找危险”&#xff0c;升级为“敏锐地识别规律”。 从“害怕失去关系”&#xff0c;升级为“有能力经营关系”。 从“被情绪牵…...

IPBan快速入门:一键安装配置,立即阻止僵尸网络入侵

IPBan快速入门&#xff1a;一键安装配置&#xff0c;立即阻止僵尸网络入侵 【免费下载链接】IPBan Since 2011, IPBan is the worlds most trusted, free security software to block hackers and botnets. With both Windows and Linux support, IPBan has your dedicated or …...

从零部署私有化AI对话框架:igogpt架构解析与实战指南

1. 项目概述与核心价值最近在折腾AI应用部署的朋友&#xff0c;可能都听说过一个词叫“套壳ChatGPT”。这类项目通常是把OpenAI的API接口包装一下&#xff0c;做个Web界面&#xff0c;让用户能更方便地使用。但今天要聊的这个项目——igolaizola/igogpt&#xff0c;它给我的感觉…...

半导体协同设计:从数据孤岛到开放标准,构建高效芯片开发流程

1. 从“单打独斗”到“协同作战”&#xff1a;半导体设计范式的演进在半导体行业摸爬滚打了十几年&#xff0c;我亲眼见证了芯片设计从一门高度依赖个人英雄主义的“手艺”&#xff0c;逐渐演变为一项必须依靠精密协作的“系统工程”。早期的设计团队&#xff0c;一个资深工程师…...

mitojs高级配置与Hook机制:如何实现高度定制化监控

mitojs高级配置与Hook机制&#xff1a;如何实现高度定制化监控 【免费下载链接】monitor &#x1f440; 一款轻量级的收集页面的用户点击行为、路由跳转、接口报错、代码报错、页面性能并上报服务端的SDK 项目地址: https://gitcode.com/gh_mirrors/mo/monitor 在当今We…...

Scarpet脚本语言深度解析:在Fabric Carpet中编写高级自动化程序的完整指南

Scarpet脚本语言深度解析&#xff1a;在Fabric Carpet中编写高级自动化程序的完整指南 【免费下载链接】fabric-carpet Fabric Carpet 项目地址: https://gitcode.com/gh_mirrors/fa/fabric-carpet Scarpet脚本语言是Fabric Carpet模组中的强大编程工具&#xff0c;专门…...

AI浪潮下光纤需求爆发,康宁如何从玻璃厂变身光纤之王?

AI光纤需求爆发&#xff0c;英伟达加速布局根据CRU&#xff0c;AI数据中心的光纤需求一年增长75.9%&#xff0c;供需缺口从6%撕开到15%&#xff0c;光纤价格更是在数月间涨超3倍。产能跟不上了&#xff0c;这就是为什么英伟达要投资康宁并加速光纤产能扩张。两个月前&#xff0…...