详解MyBatis配置文件开发与注解式开发

首先呢,五一快来啦!提前祝各位宝子们五一玩得开心,然后讲解一下MyBatis框架呀!!!

一.框架介绍

MyBatis 的主要特点

二.MyBatis工作流程

1. 初始化和配置

2. 创建 SqlSessionFactory

3. 获取 SqlSession

4. 映射器绑定

5. 执行操作

6. 处理结果

7. 提交或回滚事务

8. 释放资源

示例

注意事项

 三.核心配置文件

四.配置文件开发

五.注解式开发

1. 配置 Mapper 扫描

2. 使用注解定义 Mapper

3. 使用注解定义结果映射

4. 示例

5. 配置 MyBatis

6. 启动类配置


一.框架介绍

MyBatis 是一款优秀的持久层框架,它提供了一个对象关系映射层,用于将 Java 对象与 SQL 数据库交互操作简化。MyBatis 允许开发者直接使用 SQL 语句(包括存储过程)操作数据库,并且可以通过 XML 或注解的方式来配置 SQL 语句,从而实现数据的增删改查操作。

MyBatis 的主要特点

  1. SQL 与 Java 对象映射:MyBatis 通过映射文件将 SQL 语句与 Java 对象关联起来,支持将数据库表字段映射到 Java 对象的属性中。

  2. 灵活的 SQL 编写:MyBatis 允许开发者编写动态 SQL,可以根据不同的需求灵活地构造查询语句。

  3. 简单易用:MyBatis 的 API 设计简洁,使用起来直观方便。

  4. 插件化:MyBatis 提供了丰富的插件接口,如分页、性能分析等,可以通过编写自己的插件来扩展框架的功能。

  5. 事务管理:MyBatis 支持声明式事务管理,可以与 Spring 框架无缝集成。

  6. 映射器:MyBatis 使用映射器(Mapper)接口和 XML 文件来定义数据库操作。

  7. 结果类型:支持将 SQL 结果集映射到 Java 对象的简单类型、自动包装类型、复杂类型等。

  8. 动态 SQL:MyBatis 提供了强大的动态 SQL 功能,可以根据不同条件动态地生成 SQL 语句。

  9. 缓存机制:MyBatis 提供了一级缓存(SqlSession 级别)和二级缓存(SqlSessionFactory 级别),可以显著提高应用程序的性能。

二.MyBatis工作流程

MyBatis 是一个流行的持久层框架,它提供了一个对象关系映射层,用于简化 JDBC 的数据库操作。MyBatis 的执行过程涉及几个关键步骤,下面是一个高层次的概述:

1. 初始化和配置

在 MyBatis 启动时,它会读取配置文件(如 mybatis-config.xml),解析出数据库连接信息、事务管理方式、映射文件位置等信息。

2. 创建 SqlSessionFactory

使用配置信息创建一个 SqlSessionFactory 实例。这个实例是数据库操作的入口点,可以通过它来获取操作数据库所需的 SqlSession

3. 获取 SqlSession

SqlSessionFactory 获取 SqlSession 实例。SqlSession 允许你直接执行已映射的 SQL 语句。

4. 映射器绑定

在获取 SqlSession 时,可以同时传入一个映射器接口(比如 UserMapper),MyBatis 会自动将接口中定义的方法与 SQL 语句进行绑定。

5. 执行操作

通过 SqlSession 调用映射器接口的方法执行数据库操作,如插入、查询、更新或删除。

6. 处理结果

MyBatis 将数据库返回的结果集映射到 Java 对象中。这可以是自动映射到简单类型,也可以是映射到复杂的 POJO(Plain Old Java Object)对象。

7. 提交或回滚事务

MyBatis 可以根据配置进行事务管理。在操作完成后,可以提交或回滚事务。

8. 释放资源

操作完成后,应该关闭 SqlSession 以释放数据库连接资源。

示例

以下是 MyBatis 执行过程的一个简单示例:

// 1. 配置和初始化
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = factoryBuilder.build(inputStream);

// 2. 获取 SqlSession
SqlSession session = factory.openSession();

try {
    // 3. 映射器绑定
    UserMapper userMapper = session.getMapper(UserMapper.class);

    // 4. 执行操作
    User user = userMapper.findUserById(1);

    // 5. 处理结果
    // ...

    // 6. 提交事务
    session.commit();
} catch (Exception e) {
    // 7. 回滚事务
    session.rollback();
    // 处理异常
} finally {
    // 8. 释放资源
    session.close();
}

注意事项

  • MyBatis 支持配置文件和注解两种方式来绑定 SQL 语句和 Java 方法。
  • MyBatis 允许使用强大的 XML 映射文件或注解来编写 SQL 语句。
  • MyBatis 支持一级缓存(SqlSession 级别)和二级缓存(SqlSessionFactory 级别)来提高性能。
  • MyBatis 支持插件机制,允许开发者插入自定义的拦截器进行逻辑处理,如分页插件、日志插件等。

这往往是初学者用来测试使用的代码步骤,了解即可。


 

 三.核心配置文件

MyBatis 框架主要使用两种类型的配置文件:

  1. 核心配置文件 (mybatis-config.xml):这是 MyBatis 的主要配置文件,包含了影响 MyBatis 行为的设置和属性信息。它位于 MyBatis 应用的 classpath 根路径下,通常命名为 mybatis-config.xml。这个文件涵盖了包括数据库连接信息、事务管理、日志配置、类型别名、类型处理器、对象工厂设置、映射器、插件等配置项。

  2. 映射配置文件 (*Mapper.xml):这些文件包含了 SQL 语句和 Java 类的映射关系。它们通常与 Mapper 接口一一对应,定义了数据库操作(如 selectinsertupdatedelete)的 SQL 语句。映射文件可以放在 mappers 标签内指定的位置,也可以通过注解的方式直接在 Mapper 接口上指定。

  3. 结构如下:
  4. <configuration>:根元素。
    • <properties>:外部化配置,如数据库连接信息。
    • <settings>:包含多个 <setting> 元素,用于调整 MyBatis 的行为。
    • <typeAliases>:定义类型别名,简化 XML 配置。
    • <typeHandlers>:自定义类型处理器。
    • <objectFactory>:指定对象工厂。
    • <objectWrapperFactory>:指定对象包装器工厂。
    • <plugins>:定义插件,如分页插件。
    • <environments>:定义多种数据库环境的配置,包括事务管理和数据源。
      • <environment>:具体的环境配置。
        • <transactionManager>:事务管理器配置。
        • <dataSource>:数据源配置。
    • <databaseIdProvider>:数据库厂商标识提供者。
    • <mappers>:指定映射文件的位置。
  5. <mapper>:根元素,定义映射空间和命名空间。
    • <select><insert><update><delete>:定义 SQL 语句和映射规则。
  6. 映射配置文件的结构通常包括:

  7. <mapper>:根元素,定义映射空间和命名空间。
    • <select><insert><update><delete>:定义 SQL 语句和映射规则

四.配置文件开发

MyBatis 在启动时会解析其配置文件,以初始化和配置自身的运行环境。解析这些配置文件的顺序对框架的行为至关重要。以下是 MyBatis 解析配置文件的一般顺序:

  1. 加载核心配置文件 (mybatis-config.xml):

    MyBatis 首先加载其核心配置文件,这个文件包含了框架的全局配置,如事务管理器、数据源、类型别名、类型处理器、对象工厂、插件等。
  2. 解析 <properties> 部分

    在核心配置文件中,<properties> 部分通常会被首先解析,因为其他配置可能会引用这些属性。这些属性可以来自外部文件或直接在 XML 文件中定义。
  3. 解析 <settings> 部分

    紧接着,MyBatis 解析 <settings> 部分,这里定义了影响 MyBatis 行为的全局参数,如缓存配置、延迟加载设置等。
  4. 解析 <typeAliases><typeHandlers>

    这些部分定义了类型别名和类型处理器,它们可以让开发者在映射文件中使用简化的类名而非全限定名。
  5. 解析 <objectFactory><objectWrapperFactory>

    这些部分定义了对象工厂和对象包装器工厂,它们用于创建和处理结果对象。
  6. 解析 <plugins>

    插件定义在此部分,插件可以改变 MyBatis 的默认行为,例如实现分页查询。
  7. 解析 <environments> 部分

    环境配置定义了不同的运行环境,包括数据库连接信息和事务管理设置。
  8. 解析 <mappers> 部分

    最后,MyBatis 解析 <mappers> 部分,这里指定了映射文件的位置。映射文件包含了 SQL 语句和映射规则,它们通常与 Mapper 接口相关联。
  9. 加载映射文件 (*Mapper.xml):

    映射文件包含了具体的 SQL 映射语句,MyBatis 会根据 <mappers> 部分的配置加载这些文件。
  10. 整合所有配置信息

    所有配置信息被加载和解析后,MyBatis 会整合这些信息以构建其内部的数据结构,准备接受数据库操作请求。

五.注解式开发

MyBatis 注解式开发是一种使用注解(Annotations)来配置 MyBatis 映射,从而减少 XML 配置文件的使用。注解式开发可以简化配置,使代码更加清晰,同时保持 MyBatis 的强大功能。以下是使用注解的一些关键点:

1. 配置 Mapper 扫描

首先,需要配置 MyBatis 扫描 Mapper 接口和注解的 Mapper 文件。可以在核心配置文件 mybatis-config.xml 中使用 @MapperScan 注解指定包扫描路径,或者在 Spring 配置中指定。

2. 使用注解定义 Mapper

Mapper 接口中可以使用 MyBatis 提供的注解来定义 SQL 映射。以下是一些常用的注解:

  • @Select:用于定义查询操作的 SQL 语句。
  • @Insert:用于定义插入操作的 SQL 语句。
  • @Update:用于定义更新操作的 SQL 语句。
  • @Delete:用于定义删除操作的 SQL 语句。
  • @Results:用于定义结果映射。
  • @Param:用于指定方法参数的别名。

3. 使用注解定义结果映射

@Results 注解用于定义如何将 SQL 结果映射到 Java 对象的属性上。

4. 示例

假设有一个 User 实体类和一个对应的 UserMapper 接口:

public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(@Param("id") int id);
    
    @Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
    int insertUser(User user);
    
    // 其他数据库操作...
}

在这个例子中:

  • @Select 注解定义了一个查询操作,使用 #{id} 作为参数占位符。
  • @Param 注解指定了方法参数 id 的别名,这样 MyBatis 就知道 #{id} 对应的是方法的哪个参数。
  • @Insert 注解定义了一个插入操作,整个 User 对象将被用作参数。

5. 配置 MyBatis

mybatis-config.xml 中,可以配置扫描注解 Mapper:

<configuration>
    ...
    <mappers>
        <mapper class="com.example.UserMapper"/>
    </mappers>
    ...
</configuration>

或者,如果你使用的是 Spring 框架,可以在 Spring 配置中使用 @MapperScan 注解:

@Configuration
@MapperScan("com.example.mapper") // 指定 Mapper 接口所在的包
public class MyBatisConfig {
    // 其他 MyBatis 配置
}

6. 启动类配置

在 Spring Boot 应用中,通常不需要 mybatis-config.xml 文件,而是通过启动类和配置类来配置 MyBatis:

@SpringBootApplication
@MapperScan("com.example.mapper") // 指定 Mapper 接口所在的包
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

注解式开发是 MyBatis 的一种灵活的配置方式,尤其适合与 Spring 框架结合使用,可以减少 XML 配置的冗余,使项目结构更加清晰。

希望对宝子们有用哈,有什么需求评论即可,点个关注感谢🙏!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电路中的过压(OVP)保护电路

硬件工程师常会遇到这种情况&#xff0c;比如芯片的工作电压是5V ,但供电电压因浪涌或静电造成电压会出现超过6.5V或更高&#xff0c;而芯片能承受最高工作电压6.3V&#xff0c;这时如果选用TVS&#xff08;ESD&#xff09;, TVS因为钳位电压VC超过6.5V &#xff0c;所以无法起…

C++ 模板详解——template<class T>

一. 前言 在我们学习C时&#xff0c;常会用到函数重载。而函数重载&#xff0c;通常会需要我们编写较为重复的代码&#xff0c;这就显得臃肿&#xff0c;且效率低下。重载的函数仅仅只是类型不同&#xff0c;代码的复用率比较低&#xff0c;只要有新类型出现时&#xff0c;就需…

2024统计建模:大数据与人工智能时代的统计研究

文章目录 题目解读你需要具备的知识点课题推荐视频分析 题目解读 主要做的是“大数据”与“人工智能”。 其中“大数据”所涉及的的第一个就是大量的数据&#xff0c;数据从哪里来&#xff1f;拿到数据后&#xff0c;我们需要做基本的数据分析&#xff0c;如何对大量的数据进…

图像处理技术与应用(一)

图像处理技术与应用入门 使用skimage进行图像读取和显示 skimage库&#xff08;Scikit-image&#xff09;提供了一个强大的工具集&#xff0c;用于执行各种图像处理任务。以下是如何使用skimage读取和显示图像的基本示例&#xff1a; from skimage import ioimg io.imread(…

Shopee日破8000单无货源大卖选品案例分享

选品是电商成功路上至关重要的一环&#xff0c;为了帮助虾皮商家更好地掌握选品技巧和打造爆款&#xff0c;在知虾当中涵盖了22项极具实用性的选品方法。本文以男士包类目&#xff0c;结合比较常用的热销跟卖法为例&#xff0c;介绍下如何通过核心指标及维度去落地选品。 分析…

AI人工智能培训老师叶梓:大数据治理的关键工具:开源数据血缘分析系统

在大数据时代&#xff0c;数据的产生和传播速度日益加快&#xff0c;数据之间的关系也变得日益复杂。为了更好地管理和理解数据之间的关系&#xff0c;数据血缘分析系统应运而生。本文将介绍几个开源的数据血缘分析系统&#xff0c;它们在数据治理、数据质量管理和数据隐私保护…

我宣布!软考真的是0基础小白的福音

大家为什么觉得有的证书是智商税呢&#xff1f;无非就是证书含金量达不到企业对于人才的选拔标准&#xff0c;或是满足不了自身的职业发展需要。 但是一方面大家又知道&#xff0c;含金量高且企业认可度高的证书&#xff0c;要么是价格太贵&#xff0c;要不就是考试难度大&…

个人音乐播放网站项目(SpringBoot+Linux部署上线)

在做完第一个博客系统项目以后&#xff0c;接着做下一个项目&#xff1a;音乐播放网站项目&#xff0c;此项目应用的技术栈和第一个项目是差不多的&#xff0c;即算是学完SSM等知识以后的两个入门级Java开发项目吧。 此项目包含的核心功能有&#xff1a; 一、登录、注册、退出…

知了汇智携手西科大举办“知了杯”网络安全趣味赛,共筑网络空间安全防线

为积极响应国家网络空间安全人才战略&#xff0c;加快攻防兼备网络创新人才培养步伐&#xff0c;实现以赛促学、以赛促教、以赛促用&#xff0c;推动网络空间安全人才培养和产学研用生态发展&#xff0c;成都知了汇智科技有限公司&#xff08;以下简称&#xff1a;知了汇智&…

随笔Ubuntu上的的一些使用

Ubuntu简易使用 常用指令 cdlsmkdirrf -rm 路径 换源 备份镜像 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑文件设置 sudo gedit /etc/apt/sources.list清华源 # 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe mul…

数据库轻松切换:解读Spring中的AbstractRoutingDataSource

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据库轻松切换&#xff1a;解读Spring中的AbstractRoutingDataSource 前言AbstractRoutingDataSource介绍作用和优势&#xff1a;作用&#xff1a;优势&#xff1a; 使用 AbstractRoutingDataSource …

鬼手剪辑如何导入剪映草稿箱?含工程文件

鬼手剪辑导入剪映功能介绍 功能概述 鬼手剪辑导入剪映功能可以让您将鬼手剪辑翻译、克隆和一键解说等作品的工程文件导入到剪映草稿&#xff0c;以便通过剪映进行精细化调整。 推荐使用场景 视频二创 视频语音翻译 短剧解说等作品的微调 导出的工程文件包含以下元素 视频…

windows10小皮安装不同版本composer,实现自由切换使用

1、使用phpstudy小皮面板安装composer1.8.5和composer2.5.8两个版本&#xff1b; 2、打开刚才安装的composer安装目录&#xff1a;D:\phpstudy_pro\Extensions 3、打开composer1.8.5版本&#xff0c;修改composer.bat名称为composer1.8.5.bat&#xff1a; 4、打开composer2.5.8…

uniapp制作多选下拉框和富文本(短信页面)

实例 多选下拉框实现 http://t.csdnimg.cn/TNmcF 富文本实现 http://t.csdnimg.cn/Ei1iV

图解《图搜索算法》及代码实现

关注我&#xff0c;持续分享逻辑思维&管理思维&#xff1b; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导&#xff1b; 有意找工作的同学&#xff0c;请参考博主的原创&#xff1a;《面试官心得--面试前应该如何准备》&#xff0c;《面试官心得--面试时如何进行自…

STM32F4使用FPU/DSP核心启用与测试

STEP1、下载DSP库 具体链接如下&#xff1a; https://www.st.com/en/embedded-software/stsw-stm32065.html?dl9w6sdOSAKySFxBhN764Stg%3D%3D%2CIS1vzyA84KLAefK%2B0DawUl0FScREpiT6AdC3qFjIMJnCIgXIwr82G2XUFo6w43Wp5L5CUyrX3vZAoaHRE3nsTmRsArV3hnQOEgX73SKt8ss1vGrLlfXT24j…

indexDB 大图缓存

背景 最近在项目中遇到了一个问题&#xff1a;由于大屏背景图加载速度过慢&#xff0c;导致页面黑屏时间过长&#xff0c;影响了用户的体验。从下图可以看出加载耗时将近一分钟 IndexDB 主要的想法就是利用indexDB去做缓存&#xff0c;优化加载速度&#xff1b;在这之前&am…

VNISEdit 制作安装包

1. 环境依赖 1.1. NSIS 下载 下载地址&#xff1a;https://nsis.sourceforge.io/Download 1.2. VNISEdit 下载 下载地址1&#xff1a;https://sourceforge.net/projects/hmne/ 下载 exe 安装。 下载地址2&#xff1a;https://hmne.sourceforge.net/ 可以下载 exe 安装。也…

基础算法---前缀和

文章目录 基本思想1.前缀和2.子矩阵的和3.长度最小的子数组4&#xff0c;除自身以外数组的乘积总结 基本思想 前缀和数组就是一个数组的前i项和 前缀和的用处&#xff1a;前缀和数组求出来之后我们就可以就可以求数组中的某个特定区间的和 就比如说求l到R的和&#xff0c;我…

linux休眠唤醒流程,及示例分析

休眠流程 应用层通过echo mem > /sys/power/state写入休眠状态&#xff0c;给一张大概流程图 这个操作对应在kernel/power/main.c的state这个attr的store操作 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t n) …