MyBatis 的架构

MyBatis 的架构

MyBatis 是一个基于 Java 的持久层框架,可以将 SQL 语句和 Java 代码进行分离,通过 XML 或注解的方式配置 SQL 语句并执行,从而实现数据访问的功能。MyBatis 的架构包括以下几个部分:

  1. SqlSessionFactory:用于创建 SqlSession 对象的工厂。SqlSession 是 MyBatis 的核心类之一,它负责与数据库进行交互和管理事务。SqlSessionFactory 会读取配置文件(mybatis-config.xml)并创建 SqlSession 对象。

  2. Configuration:MyBatis 的全局配置文件,包含了 MyBatis 的各种配置信息,比如数据库连接信息、类型别名、映射文件等。

  3. Mapper:SQL 映射器,用于定义 SQL 语句和 Java 对象之间的映射关系。映射器可以通过 XML 或注解的方式进行定义。

  4. SqlSession:用于与数据库进行交互和管理事务的核心类。SqlSession 可以通过 SqlSessionFactory 创建,并且它是线程不安全的,每个线程都应该拥有自己的 SqlSession 对象。

  5. Executor:SqlSession 的底层实现类,负责执行 SQL 语句并返回结果。MyBatis 提供了多种 Executor 实现类,比如 SimpleExecutor、ReuseExecutor 和 BatchExecutor 等。

在这里插入图片描述

MyBatis 的配置

MyBatis 的配置文件有两个,分别为 mybatis-config.xml 和映射文件(Mapper XML 或注解)。下面是一个简单的 MyBatis 配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<!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.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>

上面的配置文件中,包含了以下三个部分:

  1. environments:设置 MyBatis 的环境,包括事务管理器和数据源。默认使用的是 development 环境。

  2. mappers:定义 SQL 映射器的位置。可以通过 resource、url 或 class 等方式指定映射器的位置。

  3. properties:定义全局属性,可以在 XML 中使用 ${} 语法引用这些属性。比如上面的配置文件中定义了一个名为 driver 的属性,它的值为 com.mysql.jdbc.Driver,可以在映射文件中使用 ${driver} 引用这个属性。

在映射文件中,可以定义各种 SQL 语句、参数映射和结果映射等。下面是一个简单的映射文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><select id="getUserById" parameterType="int" resultType="com.example.pojo.User">select * from user where id = #{id}</select><insert id="addUser" parameterType="com.example.pojo.User">insert into user(name,age) values(#{name},#{age})</insert>
</mapper>

上面的映射文件中,定义了两个 SQL 语句:getUserById 和 addUser。其中 getUserById 用于查询用户信息,需要一个 int 类型的参数 id,返回一个 com.example.pojo.User 类型的结果;addUser 用于添加用户信息,需要一个 com.example.pojo.User 类型的参数,没有返回值。

在 MyBatis 中,可以通过以下方式来获取 SqlSession 对象并执行 SQL 语句:

public class MyBatisTest {public static void main(String[] args) {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();try {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.getUserById(1);System.out.println(user);User newUser = new User();newUser.setName("Tom");newUser.setAge(20);userMapper.addUser(newUser);sqlSession.commit();} finally {sqlSession.close();}}
}

在上面的示例代码中,首先读取了配置文件 mybatis-config.xml,然后通过 SqlSessionFactoryBuilder 将配置文件解析为 SqlSessionFactory 对象,最后通过 SqlSessionFactory 创建 SqlSession 对象。在 SqlSession 中,使用 getMapper 方法获取映射器对象,然后调用映射器对象中的方法执行 SQL 语句。

总之,MyBatis 是一个基于 Java 的持久层框架,可以将 SQL 语句和 Java 代码进行分离,通过 XML 或注解的方式配置 SQL 语句并执行。MyBatis 的架构包括 SqlSessionFactory、Configuration、Mapper、SqlSession 和 Executor 等组件。在使用 MyBatis 进行开发时,需要配置 MyBatis 的全局配置文件和映射文件,然后通过 SqlSession 对象执行 SQL 语句。

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

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

相关文章

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片&#xff08;Shards&#xff09;2.2、副本&#xff08;Replicas&#xff09;2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

CAD2021安装教程适合新手小白【附安装包和手册】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载文件二、使用步骤1.安装软件前&#xff0c;断开电脑网络&#xff08;拔掉网线、关闭WIFI&#xff09;2、鼠标右击【AutoCAD2021(64bit)】压缩包选择【解…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么&#xff1f; 2.为什么需要docker&#xff1f; 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images&#xff08;镜像&#xff09; Cont…

【网络安全】渗透测试工具——Burp Suite

渗透测试工具Burp Suite主要功能详解 前言一、 Proxy模块1.1 界面布局1.1.1 菜单栏&#xff08;1&#xff09; 菜单栏 Burp&#xff08;2&#xff09; 菜单栏 project&#xff08;3&#xff09; 菜单栏 Intruder&#xff08;4&#xff09; 菜单栏 Repeater&#xff08;5&#x…

【PHP面试题44】PHP5的版本和PHP7之间有哪些区别

文章目录 一、前言二、底层调整2.1性能提升2.2 新的引擎2.3 数据类型改进2.4 错误处理改进2.5 语言特性增加 三、应用层差异3.1 兼容性3.2 类和方法改进3.3 错误处理机制3.4 性能优化3.5 新的扩展支持 四、一些语法糖示例4.1 标量类型声明示例4.2 新增了Spaceship操作符&#x…

【Spring】使用注解读取和存储Bean对象

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;本期给大家带来的是&#xff1a; 将对象存储到 Spring 中、Bean 对象的命名规则、从Spring 中获取bean …

数据库基本操作--------MySQL 索引

目录 一、MySQL 索引 1&#xff0e;索引的概念 2&#xff0e;索引的作用 3&#xff0e;创建索引的原则依据 4&#xff0e;索引的分类和创建 &#xff08;1&#xff09;普通索引 ●直接创建索引 &#xff08;2&#xff09;唯一索引 &#xff08;3&#xff09;主键索引 ●创…

Java InetAddress类

【InetAddress类】 【相关方法】 【使用方法实例】 【代码结果】

leetcode-541. 反转字符串 II

leetcode-541. 反转字符串 II 文章目录 leetcode-541. 反转字符串 II一.题目描述二.第1次提交(for循环&#xff0c;std::reverse)三.第2次提交四.第3次提交五.第4次提交六.代码随想录解答一七.代码随想录解答二八.代码随想录解答三 一.题目描述 二.第1次提交(for循环&#xff0…

IDE /字符串 /字符编码与文本文件(如cpp源代码文件)

文章目录 概述文本编辑器如何识别文件的编码格式优先推测使用了UTF-8编码&#xff1f;字符编码的BOM字节序标记重分析各文本编辑器下的测试效果Qt Creator的文本编辑器系统记事本VS的文本编辑器Notepad 编译器与代码文件的字符编码ANSI编码其他 概述 前期在整理 《IDE/VS项目属…

云计算的学习(六)

六、云计算的发展趋势 1.云计算相关领域介绍 1.1物联网 物联网来源于互联网&#xff0c;是万物互联的结果&#xff0c;是人和物、物和物之间产生通信和交互。 物联网主要技术&#xff1a; RFID技术&#xff08;射频识别技术&#xff09;传感器技术嵌入式系统技术 1.2大数据…