mybatis框架基础以及自定义插件开发

2024-09-08 12:12

本文主要是介绍mybatis框架基础以及自定义插件开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 框架概览
      • 框架预览
      • MyBatis框架的核心组件
      • MyBatis框架的工作原理
      • MyBatis框架的配置
      • MyBatis框架的最佳实践
    • 自定义插件开发
      • 1. 添加依赖
      • 2. 创建插件类
      • 3. 配置插件
      • 4. 启动类中注册插件
      • 5. 测试插件
    • 参考文献

框架概览

MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射,为开发者提供了极大的灵活性和便利性。以下是关于MyBatis框架的详解:

框架预览

在这里插入图片描述

MyBatis框架的核心组件

  • SqlSessionFactoryBuilder:负责根据配置或代码生成SqlSessionFactory。
  • SqlSessionFactory:用于创建SqlSession的工厂接口。
  • SqlSession:执行SQL语句并获取结果的核心接口。
  • Sql Mapper:由Java接口和XML文件(或注解)构成,负责发送SQL去执行,并返回结果。

MyBatis框架的工作原理

MyBatis框架的工作原理主要包括以下几个步骤:

  1. 配置阶段:读取配置文件,包括数据库连接信息、SQL映射文件的路径等,创建一个Configuration对象。
  2. 映射器加载阶段:解析SQL映射文件,将SQL语句和对应的参数封装成MappedStatement对象。
  3. 执行阶段:通过SqlSession对象调用相应的方法来执行SQL语句。
  4. 结果处理阶段:将SQL执行结果封装成对应的Java对象,并返回给调用方。

MyBatis框架的配置

MyBatis的配置主要通过mybatis-config.xml文件进行,该文件包含了数据库连接信息、SQL映射文件的路径等。此外,MyBatis还支持通过注解方式进行配置。

MyBatis框架的最佳实践

  • 使用Mapper接口和XML文件进行SQL映射:将SQL语句与Java代码分离,提高代码的可维护性和可读性。
  • 使用动态SQL:根据条件动态生成SQL语句,避免写大量重复的SQL代码。
  • 使用缓存:MyBatis支持一级缓存和二级缓存,可以提高查询性能。

MyBatis框架通过其灵活性和便利性,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑的实现。无论是简单的数据操作还是复杂的数据查询,MyBatis都能提供高效、稳定的支持。

自定义插件开发

在 Spring Boot 项目中集成 MyBatis 并开发自定义插件是一个常见的需求。Spring Boot 本身就提供了很好的整合 MyBatis 的支持。下面是一个如何在 Spring Boot 项目中开发 MyBatis 自定义插件的步骤。

1. 添加依赖

首先确保你的 Spring Boot 项目中添加了 MyBatis 的依赖。如果你还没有添加,可以在 pom.xml 文件中加入以下依赖:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> <!-- 使用最新版本 -->
</dependency>

2. 创建插件类

创建一个实现了 Interceptor 接口的类,并使用 @Intercepts 注解来指定要拦截的方法。假设我们要开发一个简单的 SQL 打印插件:

import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Properties;@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class LoggingPlugin implements Interceptor {private static final Logger logger = LoggerFactory.getLogger(LoggingPlugin.class);@Overridepublic Object intercept(Invocation invocation) throws Throwable {logger.info("Executing SQL: {}", ((BoundSql) invocation.getArgs()[2]).getSql());return invocation.proceed();}@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {// 设置属性,如果有的话}
}

3. 配置插件

在 Spring Boot 的 application.propertiesapplication.yml 文件中配置插件:

mybatis.plugins=com.example.LoggingPlugin

或者在 application.yml 中:

mybatis:plugins: com.example.LoggingPlugin

4. 启动类中注册插件

为了确保插件能够被 MyBatis 正确识别,你还需要在 Spring Boot 的启动类中注册插件。可以通过 SqlSessionFactoryBean 来注册:

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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
public class MyBatisConfig {@Autowiredprivate DataSource dataSource;@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);factoryBean.setTypeAliasesPackage("com.example.model"); // 设置别名包PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/*.xml")); // 设置映射文件位置// 注册插件Properties props = new Properties();props.setProperty("plugins", "com.example.LoggingPlugin");factoryBean.setPlugins(new Interceptor[]{new LoggingPlugin()});return factoryBean.getObject();}
}

5. 测试插件

最后,你可以通过运行一些测试来验证插件是否按预期工作。创建一些 Mapper 和 Service 层的方法,然后通过调用这些方法来触发 SQL 执行,检查日志输出是否包含 SQL 语句。

参考文献

mybatis中文文档

这篇关于mybatis框架基础以及自定义插件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148083

相关文章

mybatis的整体架构

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

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。