MyBatis(4)MyBatis 如何配置和使用

MyBatis 的配置和使用可以分为几个步骤进行详细解析。请注意,完整的源码分析是非常庞大的工作,这里会给出一个高层次的视图和关键代码演示。

1. MyBatis 配置

配置通常通过 mybatis-config.xml 配置文件进行,这个文件包括了对 MyBatis 行为的详细设置,比如数据源、事务管理、映射器文件位置等。

mybatis-config.xml 示例
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="org/myapp/mapper/BlogMapper.xml"/></mappers>
</configuration>

2. 映射器配置

映射器文件或接口定义了 SQL 映射的细节,它可以是 XML 文件,也可以是注解在 Java 接口上。

BlogMapper.xml 示例
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.myapp.mapper.BlogMapper"><select id="selectBlog" resultType="Blog">SELECT * FROM BLOG WHERE id = #{id}</select>
</mapper>

或者使用注解的方式定义在接口上:

public interface BlogMapper {@Select("SELECT * FROM BLOG WHERE id = #{id}")Blog selectBlog(int id);
}

3. 代码集成

在代码中,你首先要通过 SqlSessionFactoryBuilder 构建 SqlSessionFactory,然后从 SqlSessionFactory 获得 SqlSession,最后通过 SqlSession 获取和操作映射器。

示例代码
// 构建 SqlSessionFactory
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);// 打开一个 SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {// 获取映射器对象,执行操作BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);// 操作逻辑...
} catch (Exception e) {// 异常处理...
}

4. 深入源码

深入 MyBatis 源码需要跟踪 MyBatis 初始化时的关键过程,如 SqlSessionFactory 的构建,SqlSession 的创建,mapper 接口的实现等。

例如, SqlSessionFactory 的构建过程涉及解析配置文件,构建配置实例(Configuration 类),然后根据这个配置实例创建 SqlSessionFactory

在创建 SqlSession 时,MyBatis 会创建执行器(Executor),这个执行器依赖于配置的事务管理器和数据源。

当获取 mapper 接口的实现时,MyBatis 实际上使用了 JDK 动态代理或者 CGLIB 代理(针对没有接口的类)。代理对象会拦截接口方法的调用,转换为执行相应的 SQL 操作。

代理创建示例
// MapperProxyFactory 创建 mapper 代理
public class MapperProxyFactory<T> {private final Class<T> mapperInterface;public MapperProxyFactory(Class<T> mapperInterface) {this.mapperInterface = mapperInterface;}@SuppressWarnings("unchecked")protected T newInstance(MapperProxy<T> mapperProxy) {return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);}public T newInstance(SqlSession sqlSession) {final MapperProxy<T> mapperProxy = new MapperProxy<>(sqlSession, mapperInterface);return newInstance(mapperProxy);}
}

这是一个非常精简的源码片段,实际的 MyBatis 源码要复杂得多,包含了大量的配置解析和动态 SQL 构建逻辑。

5. 细节和调优

  • 确保 mybatis-config.xml 中定义了合适的数据库连接信息和 mapper 文件。
  • 使用合适的事务管理方式(比如上面例子中的 JDBC)。
  • 妥善处理 SqlSession 的生命周期,确保每个请求都开启新的 SqlSession,并在使用完毕后关闭它。
  • 使用合适的缓存策略,可以有效提升查询性能。
  • 考虑使用 MyBatis 提供的延迟加载特性,它可以减少不必要的数据库查询。
  • 理解 MyBatis 的参数映射和结果映射,这样可以更精确地控制 SQL 语句和 Java 对象之间的映射关系。

以上是 MyBatis 配置与使用的一个概览,具体应用时需要根据项目需求调整配置和代码实现。

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

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

相关文章

台式扫描电镜工作距离越远观察区越大?

台式扫描电镜&#xff08;Scanning Electron Microscope, SEM&#xff09;是一种高分辨率的显微镜&#xff0c;它利用电子束扫描样品表面&#xff0c;通过样品与电子束相互作用产生的信号来形成图像。这种显微镜广泛应用于材料科学、生物学和医学等领域&#xff0c;以观察样品的…

提示词绕过大模型安全限制

大模型安全绕过策略 简介 本文使用简单的提示词&#xff0c;可以在所有场景中实现针对某开源模型的安全策略绕过。 glm-4-9b-chat 的安全措施还有待完善。 上一代的6b比这一代的9B&#xff0c;要安全&#xff1b;上一代的6B大模型这一招没有用。 正常对话 若在下述正常互动…

html +css 控制文本高度超出变成省略号

.overflow{height: 50px;display: -webkit-box; /* 使用Webkit的弹性盒子模型显示 */-webkit-line-clamp: 2; /* 限制在一个块元素显示的文本的行数 */-webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素的排列方式 */overflow: hidden; /* 隐藏超出容器的内容 */…

经纬恒润EAS.HSM:驱动硬件信息安全

概述 HSM&#xff08;Hardware Security Module&#xff09;硬件安全模块&#xff0c;是一种用于保护和管理强认证系统所使用的密钥&#xff0c;并同时提供相关密码学操作的计算机硬件设备。 HSM 在汽车信息安全中扮演着至关重要的角色。随着汽车智能化和网联化的快速发展&am…

ONLYOFFICE8.1版本震撼来袭

目录 软件简介 产品概述&#xff1a; 功能特点&#xff1a; 技术原理&#xff1a; 版本与部署&#xff1a; 8.1版本更新 全新的PDF编辑器 1.文本编辑 2.页面处理 &#xff08;添加、旋转、删除&#xff09; 3.插入和调整各种对象&#xff0c;例如表格、形状、文本框、…

MYSQL十、MYSQL的存储过程和触发器的基本认识

存储过程 存储过程&#xff1a;存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff…

【学习笔记】数据结构(三)

栈和队列 文章目录 栈和队列3.1 栈 - Stack3.1.1 抽象数据类型栈的定义3.1.2 栈的表示和实现 3.2 栈的应用举例3.2.1 数制转换3.2.2 括号匹配的检验3.2.3 迷宫求解3.2.4 表达式求值 - 波兰、逆波兰3.2.5 反转一个字符串或者反转一个链表 3.3 栈与递归的实现3.4 队列 - Queue3.4…

Swift Combine — Scheduler(subscribe(on:)和receive(on:)的使用)

在 Swift 的 Combine 框架中&#xff0c;Scheduler 是一个重要的概念&#xff0c;用于控制任务的调度和执行。本文将详细介绍 Scheduler 的作用、常见的 Scheduler 类型以及如何使用 Scheduler 来管理任务的执行。 Scheduler 的定义 Scheduler 用于管理任务的调度和执行&…

Cell2Sentence:为LLM传输生物语言

像GPT这样的LLM在自然语言任务上表现出了令人印象深刻的性能。这里介绍一种新的方法&#xff0c;通过将基因表达数据表示为文本&#xff0c;让这些预训练的模型直接适应生物背景&#xff0c;特别是单细胞转录组学。具体来说&#xff0c;Cell2Sentence将每个细胞的基因表达谱转换…

AI学习指南机器学习篇-朴素贝叶斯模型应用与Python实践

AI学习指南机器学习篇-朴素贝叶斯模型应用与Python实践 在本篇博客中&#xff0c;我们将会介绍如何使用Python中的Scikit-learn库来实现朴素贝叶斯模型。朴素贝叶斯是一种常见的机器学习算法&#xff0c;它在文本分类、垃圾邮件检测等领域有着广泛的应用。通过本文的学习&…

小学数学蝴蝶模型详解

蝴蝶模型 1.蝴蝶模型仅存在于梯形中&#xff0c;是连接梯形两条对角线而形成的&#xff0c;如下图&#xff1a; 2.蝴蝶模型有几条公式 (1) (2) S△AODS△BOC 等等......

commons-pool2 对象池技术

对象池&#xff1f; 让任意对象实现池功能&#xff0c;只要结合使用两个类GenericObjectPool 和PooledObjectFactory &#xff0c;这个池子可以实现: &#xff08;1&#xff09;minIdle个数保证&#xff1a;通过配置&#xff0c;测试并清除池子中的空闲对象&#xff0c;以保证…

多商户零售外卖超市外卖商品系统源码

构建你的数字化零售王国 一、引言&#xff1a;数字化零售的崛起 在数字化浪潮的推动下&#xff0c;零售业务正经历着前所未有的变革。多商户零售外卖超市商品系统源码应运而生&#xff0c;为商户们提供了一个全新的数字化零售解决方案。通过该系统源码&#xff0c;商户们可以…

BFS:解决拓扑排序问题

文章目录 什么是拓扑排序&#xff1f;关于拓扑排序的题1.课程表2.课程表Ⅱ3.火星词典 总结 什么是拓扑排序&#xff1f; 要知道什么拓扑排序我们首先要知道什么是有向无环图&#xff0c;有向无环图我们看名字其实就很容易理解&#xff0c;有向就是有方向&#xff0c;无环就是没…

C# 热插拔---插件开发

热插拔是以多态&#xff0c;文件监控&#xff0c;反射为基础的。所以用到的是FileSystemWatcher类和 Assembly 类&#xff0c;主要原理就是动态加载dll文件&#xff0c;而要监控dll文件&#xff0c;最好的就是用FileSystemWatcher类&#xff0c;它可以实时监控指定路径下的文件…

028基于SSM+Jsp的电影售票系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

梅雨季要祛湿!分不清寒湿和湿热,小心越祛越湿!4个方法,助你温和排湿热与寒湿

梅雨季又又又又到了&#xff0c;苏州的雨已经连下3天了&#xff0c;到处都湿哒哒、黏糊糊&#xff01;胃口不好、身体酸重、心情不好……湿气太重了&#xff01; 中医有一句话说“湿气在&#xff0c;百病害&#xff0c;湿气除&#xff0c;百病无”&#xff0c;意思是“湿”为万…

Java应用中的数据加密与解密技术详解

在当今的网络环境中&#xff0c;数据安全变得尤为重要。无论是保护用户隐私还是确保业务数据不被篡改&#xff0c;加密技术都是不可或缺的一环。Java提供了丰富的API来支持各种加密算法&#xff0c;包括对称加密、非对称加密以及消息摘要等。本文将详细介绍如何在Java应用中使用…

编写一个可复用且使用方式简单的部署脚本

只需一行命令就可使用应用部署或重新部署 当我们部署Java项目时&#xff0c;一般有两种部署方式&#xff1a; 使用java -jar命令来运行jar包将应用打成jar包以容器的方式进行部署 本篇文章主要讲解第二种方式&#xff0c;以部署xxl-job-admin为例 1.编写restart.sh脚本&…

IDEA启动项目Error:java: JDK isn‘t specified for module ‘test‘

错误原因&#xff1a; idea自带JDK不匹配导致项目启动失败 解决方法&#xff1a; 修改idea自带JDK为自己安装的JDK 调整步骤&#xff1a;