在Spring Boot中整合MyBatis

第1步:添加依赖:
在pom.xml文件中添加MyBatis和MySQL JDBC驱动的依赖。如果你使用的是Maven,配置如下:

   <dependencies><!-- Spring Boot Starter Data JPA 可能已经包含了 spring-boot-starter-data-jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!-- MyBatis 以及 MyBatis-Spring 的依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> <!-- 根据实际情况选择最新版本 --></dependency><!-- MySQL JDBC Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency></dependencies>

第2步:配置数据源 DataSource:
在application.properties或application.yml文件中配置数据库连接信息:

   spring.datasource.url=jdbc:mysql://localhost:3306/mydatabasespring.datasource.username=rootspring.datasource.password=mypasswordspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

第3步:(可选)配置MyBatis全局配置文件:
如果你需要自定义MyBatis的全局配置,可以创建一个mybatis-config.xml并将其放在类路径下,然后在Spring Boot配置中指定该文件的位置:

   mybatis.config-location=classpath:mybatis-config.xml

第4步:编写实体类(POJOs):

第5步:编写Mapper接口及映射文件:
创建一个StudentsMapper.java接口,并声明对应的方法。
创建一个StudentsMapper.xml 文件放在src/main/resources/mapper/目录下。

第6步:在SpringBoot主类上或者单独的配置类上使用@MapperScan注解来自动扫描并注入Mapper接口。
主类

   @SpringBootApplication@MapperScan("com.example.myapp.mapper") // 替换为你的Mapper接口所在的包名public class MyAppApplication {public static void main(String[] args) {SpringApplication.run(MyAppApplication.class, args);}}

单独的配置类

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;
import java.util.Properties;@Configuration
@MapperScan(basePackages = "com.example.myapp.mapper") // 指定Mapper接口所在的包名
public class MyBatisConfig {@Autowiredprivate DataSource dataSource; // 注入数据源@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);// 如果有全局配置文件或映射文件路径需要指定,可以添加如下配置factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));// 添加自定义属性等Properties properties = new Properties();properties.setProperty("mybatis.configuration.mapUnderscoreToCamelCase", "true");factoryBean.setConfigurationProperties(properties);return factoryBean.getObject();}// 可选:配置事务管理器// @Bean// public PlatformTransactionManager transactionManager(SqlSessionFactory sqlSessionFactory) {//     return new SqlSessionFactoryTransactionManager(sqlSessionFactory);// }
}

@MapperScan注解则会告诉Spring去com.example.myapp.mapper这个包及其子包下查找所有带有@Mapper注解的接口,并将它们注册为Spring Bean

必须要加 @Mapper 吗?
不是绝对必要,但是,为了更好的可读性和明确性,以及在代码重构时减少错误的可能性,强烈建议在所有的Mapper接口上都使用@Mapper注解。此外,在一些情况下,如单元测试中直接实例化Mapper接口时,@Mapper注解是必须的,因为它可以让Spring通过注解处理器自动处理依赖注入。

如果不使用@Mapper注解,要满足如下2个条件
1、 需要确保不带@Mapper注解的Mapper接口位于@MapperScan指定的包及其子包下。
例如,如果@MapperScan(basePackages = "com.example.project.mapper"),那么所有的非注解式Mapper接口必须在这个包或者其子包内,如com.example.project.mapper.StudentMapper

2、MyBatis会根据接口的全限定类名来查找对应的XML映射文件。
例如,如果你有一个名为com.example.project.mapper.StudentMapper的Mapper接口,那么其对应的XML映射文件应该如下:

<mapper namespace="com.example.project.mapper.StudentMapper"><!-- SQL语句和结果映射定义 --><select id="selectStudentById" resultType="com.example.project.entity.Student">SELECT * FROM students WHERE id = #{id}</select><!-- 其他SQL语句定义... -->
</mapper>

在这个例子中,namespace属性值为com.example.project.mapper.StudentMapper,与Java接口的全限定类名完全一致。通过这种方式,MyBatis能够正确地将XML中的SQL语句结果映射与Mapper接口的方法对应起来。即使在不使用@Mapper注解的情况下,只要保证接口名称XML映射文件的命名以及namespace属性的设置遵循上述规则,MyBatis也能正确识别并处理这些接口方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算入门——Linux 命令行入门

云计算入门——Linux 命令行入门 前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 如今&#xff0c;我们许多人都熟悉计算机&#xff08;台式机和笔记本电…

Ant Design Vue详解a-tree-select使用树形选择器,递归渲染数据,点击选项回显,一二级菜单是否可选等问题

后台给的树形数据&#xff1a; {"code": 200,"data": [{"code": "jsd","children": [{"code": "hx","children": [],"name": "航向","id": 8,"libTable…

《WebKit 技术内幕》学习之十一(3):多媒体

3 音频 3.1 音频元素 说完视频之后&#xff0c;接下来就是HTML5中对音频的支持情况。音频支持不仅指对声音的播放&#xff0c;还包括对音频的编辑和合成&#xff0c;以及对乐器数字接口&#xff08;MIDI&#xff09;等的支持&#xff0c;下面逐次介绍并分析它们。 3.1.1 H…

代码随想录算法训练营第36天 |435. 无重叠区间 763.划分字母区间 56. 合并区间

目录 435. 无重叠区间 &#x1f4a1;解题思路 &#x1f4bb;实现代码 763.划分字母区间 &#x1f4a1;解题思路 &#x1f4bb;实现代码 56. 合并区间 &#x1f4a1;解题思路 &#x1f4bb;实现代码 435. 无重叠区间 题目链接&#xff1a;435. 无重叠区间 给定一个…

一文讲透Redis的LRU与LFU算法实现

深入解析Redis的LRU与LFU算法实现 一、前言 Redis是一款基于内存的高性能NoSQL数据库&#xff0c;数据都缓存在内存里&#xff0c; 这使得Redis可以每秒轻松地处理数万的读写请求。 相对于磁盘的容量&#xff0c;内存的空间一般都是有限的&#xff0c;为了避免Redis耗尽宿主…

【Go面试向】Go程序的执行顺序

【Go】Go程序的执行顺序 大家好 我是寸铁&#x1f44a; 总结了一篇Go程序的执行顺序的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; Go程序内容 go程序通常包含: 包、常量、变量、init()、main()等元素 下面从这几个方面分别去梳理&#xff01; 包的执行顺序 程序中的包 …

Linux系统常用命令行指令

Linux系统是一种常用于开源项目开发的生产环境&#xff0c;因其免费、开源、安全、稳定的特点被广泛应用于手机、平板电脑、路由器、电视和电子游戏机等嵌入式系统中&#xff0c;能够更加简便地让用户知道系统是怎样工作的。前几日我安装好了Red Hat Enterprise Linux 9.0&…

Linux的常见指令和基本操作演绎【复习篇章一】

文章目录 前言下载安装 XShellXShell 下的复制粘贴热键操作01.ls指令tree 02.cd指令03.touch指令04.mkdir指令&#xff08;重要&#xff09;&#xff1a;05.rmdir指令 && rm 指令&#xff08;重要&#xff09;06.组合07.man指令&#xff08;重要&#xff09;&#xff1…

SpringMVC:企业级解读(二)

目录 八. 构建卓越JavaWeb应用&#xff1a;最佳实践与性能优化 1. 代码组织与规范 2. 全局异常处理与日志记录 3. 性能优化与安全性考虑 4. 分布式应用 5. 提高Spring MVC的开发效率和代码质量 九. 构建卓越用户体验&#xff1a;Themes 与 UI 组件集成 1. 主题与CSS预处…

《WebKit 技术内幕》学习之十一(4):多媒体

4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历&#xff0c;这样的应用场景相当典型和流行&#xff0c;但是基本上来说它们都是每个公司推出的私有产品&#xff0c;而且通信等协议也都是保密的&#xff0c;这使得一种产品的用户基本上不可能…

SpringBoot应用开发的jar包,怎样在服务器重启情况下,自启动,从而实现远程无人值守

1.编写启动脚本用于jar # 1、vim创建脚本vim startup.sh# 2、命令行模式下输入i# 3、添加以下内容 #!/bin/bashnohup java -Xms2048m -Xmx2048m -Xmn1024m -Xss1024k -Dfile.encodingUTF-8 -server -XX:HeapDumpOnOutOfMemoryError -jar XXX-api-1.0.0.jar > XXX-api.log 2…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 在一个人体姿态估计的任务中&#xff0c;需要用深度学习模型…

Ubuntu 常用命令、docker 常用命令、unzip常用命令、tar常用命令

ubuntu 常用命令&#xff1a; 进入管理员模式&#xff1a; sudo su退出管理员模式&#xff1a; su <用户名>重启系统&#xff1a; rebootubuntu 复制文件夹下文件到其他文件夹下 cp -r source_folder/* destination_folder/删除文件夹下内容而不删除自身(进入到目录…

天天酷跑-C语言搭建童年游戏(easyx)

游戏索引 游戏名称&#xff1a;天天酷跑 游戏介绍&#xff1a; 本游戏是在B站博主<程序员Rock>的视频指导下完成 想学的更详细的小伙伴可以移步到<程序员Rock>视频 【程序员Rock】C语言项目&#xff1a;手写天天酷跑丨大一课程设计首选项目&#xff0c;手把手带你用…

【linux】Debian挂起和休眠

一、挂起和休眠 在Debian桌面系统中&#xff0c;挂起和休眠是两种不同的状态&#xff0c;它们之间有一些区别。 挂起&#xff08;Suspend&#xff09;是将当前系统的状态保存到RAM&#xff08;内存&#xff09;中&#xff0c;然后关闭所有硬件设备&#xff0c;除了RAM之外。在…

如何用H5+CSS+JS写一个简单的招聘网站

大家好&#xff0c;我是猿码叔叔&#xff0c;一个 Java 语言开发者。应网友要求&#xff0c;写一个简单的招聘页面。由于技术原因&#xff0c;页面相对简单&#xff0c;朋友们可以选择性的阅读&#xff0c;如果对您有帮助&#xff0c;也可直接拿去使用&#xff0c;因为接下来除…

数据分析的理念、流程、方法、工具(下)

四、用户分群 1、用户分群 用户分群是精细化运营的基础要求&#xff0c;也是数据分析的最基础方式。对用户进行分群&#xff0c;能帮助我们了解每个细分群体用户的变化情况&#xff0c;进而了解用户的整体现状及发展趋势。同时&#xff0c;由于运营资源本身有限&#xff0c;不…

动态数据源dynamic-spring-boot-starter

将数据库相关依赖引入 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter…

满意度调研需要注意什么

本文由群狼调研&#xff08;长沙食堂满意度调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。满意度调研是一种市场调查方法&#xff0c;用于了解顾客对产品或服务的满意程度。通过满意度调研&#xff0c;企业可以找到影响顾客满意度的关键因素&#xff0c;以…

技术变革下职业危机

方向一&#xff1a;技术变革 1.人工智能&#xff08;AI&#xff09;&#xff1a;AI技术的快速发展正在改变各个行业。AI在医疗诊断、金融分析、客户服务以及物流管理等方面都有广泛应用&#xff0c;提高了效率和准确性。但同时也引发了一些道德和道德问题&#xff0c;比如隐私…