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.mzph.cn/news/1936.shtml

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

相关文章

学习opencv.js之基本使用方法(读取,显示,灰度化,边缘检测,特征值点检测)

opencv.js是什么 OpenCV.js 是 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;的 JavaScript 版本。OpenCV 是一个广泛使用的计算机视觉和图像处理库&#xff0c;提供了一系列功能强大的算法和工具&#xff0c;用于处理图像、视频、特征提取、对象识别等…

Storage、正则表达式

1 LocalStorage 2 SessionStorage 3 正则表达式的使用 4 正则表达式常见规则 5 正则练习-歌词解析 6 正则练习-日期格式化 Storage-Storage的基本操作 // storage基本使用// 1.token的操作let token localStorage.getItem("token")if (!token) {console.log(&q…

python开发项目基于语音识别的智能垃圾分类系统的设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

平安养老险党委书记、董事长甘为民:助推养老保障事业高质量发展

随着人口老龄化趋势加剧&#xff0c;中国养老金融市场呈现出巨大的潜力&#xff0c;逐步迈入养老新时代。 平安养老险党委书记、董事长甘为民提出&#xff0c;养老保险公司要想在市场中展现出独特的市场影响力&#xff0c;需要聚焦养老主业&#xff0c;发挥自身专业特色&#…

详解c++---特殊类设计

目录标题 设计一个不能被拷贝的类设计一个只能从堆上创建对象的类设计一个只能在栈上创建对象的类设计一个无法被继承的类什么是单例模式饿汉模式饿汉模式的缺点懒汉模式懒汉模式的优点懒汉模式的缺点特殊的懒汉 设计一个不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;…

(Linux)基础命令

帮助文档 公式功能man 命令名访问Linux手册页命令名 – helpinfo 命令名查看命令的功能&#xff0c;来源&#xff0c;选项等whatis 命令名 ls 公式功能ls [选项][目录或文件]对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及…

自学网络安全究竟该从何学起?

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入行…

webrtc源码阅读之视频RTP接收JitterBuffer

在音视频通信中&#xff0c;网络抖动和延迟是常见的问题&#xff0c;会导致音视频质量下降和用户体验不佳。为了解决这些问题&#xff0c;WebRTC引入了Jitter Buffer&#xff08;抖动缓冲区&#xff09;这一重要组件。Jitter Buffer是一个缓冲区&#xff0c;用于接收和处理网络…

未来驾驶新标配;CarLuncher车载开发塑造智能娱乐导航系统

车载开发在新能源汽车的快速市场占有率增长背景下具有广阔的前景。随着环境保护意识的增强和政府对清洁能源的支持&#xff0c;新能源汽车&#xff08;如电动汽车&#xff09;在全球范围内呈现出快速增长的趋势。这种趋势为车载开发提供了许多机会和潜在市场。 新能源汽车的普…

基于SpringBoot+微信小程序的医院预约叫号小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 该项目是基于uniappWe…

【C++初阶】构造函数和析构函数

文章目录 一、类的六个默认成员函数二、构造函数三、析构函数 一、类的六个默认成员函数 &#x1f4d6;默认成员函数 用户没有显式实现&#xff0c;编译器会自动生成的成员函数&#xff0c;称为默认成员函数。 构造函数&#xff1a;完成对象的初始化工作。析构函数&#xff…

【http-server】http-server的安装、前端使用http-server启动本地dist文件服务:

文章目录 一、http-server 简介:二、安装node.js:[https://nodejs.org/en](https://nodejs.org/en)三、安装http-server:[https://www.npmjs.com/package/http-server](https://www.npmjs.com/package/http-server)四、开启服务&#xff1a;五、http-server参数&#xff1a;【1…

docker FTP服务器搭建与排坑

在使用FTP时&#xff0c;如果客户端机器和FTP服务器双方之间的所有端口都是开放的&#xff0c;那连接不存在问题。如果客户端与服务器之间有防火墙&#xff0c;如果没配置好防火策略和采用合适的连接模式&#xff0c;会导致登录成功&#xff0c;但无法List列表的问题。要避免出…

rust的函数和注释

1.函数 声明函数使用 fn 关键字rust使用snake case 命名规范&#xff0c;即所有的字母都是小写的&#xff0c;单词之间使用下划线分开 fn main(){println!("hello world");another_function(); fn another_function(){println!("Another function"); }函…

Vscode配置grpc+c#+proto

首先是环境配置&#xff0c;用的dotnet5.0的sdk&#xff0c;所以Vscode的C#插件版本要选择1.24&#xff0c;然后需要配置C# Snippets、NuGget Package Manager、vscode-proto3、vscode-solution-extension&#xff08;可选&#xff09;。 以vscode-solution-extension为例新建A…

学习day47

Vue 现在开始学Vue了&#xff0c;问了同学&#xff0c;他说这个东西的内容很多。然后就跟着尚硅谷来学Vue了 用的是visual studio code&#xff0c;所以又下了一个visual。 首先时下载Vue&#xff0c;我再Vue3的官网是没有看到下载的&#xff0c;所以是跑到Vue2去下载的 将它…

G1垃圾收集分类-JVM(十四)

上篇文章说了G1不在是连续的老年代年轻代&#xff0c;而是分为不同的region&#xff0c;有eden&#xff0c;survivor&#xff0c;old&#xff0c;humongous&#xff0c;当大于百分之50region的数据则直接进入humongous&#xff0c;如果对象太大&#xff0c;会连续的存储&#x…

P8271 [USACO22OPEN] COW Operations S 奶牛操作

P8271 [USACO22OPEN] COW Operations S 奶牛操作 文章目录 P8271 [USACO22OPEN] COW Operations S 奶牛操作[USACO22OPEN] COW Operations S题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示分析code [P8271 USACO22OPEN] COW Operations S - 洛谷 | 计算机科学教…

使用Python的requests库发送HTTPS请求时的SSL证书验证问题

问题描述 使用python的requests库去发送https请求&#xff0c;有时候不设置verifyFalse不报错&#xff0c;有时候又报错。 问题原因 使用Python的requests库发送HTTPS请求时&#xff0c;设置verifyFalse参数可以跳过SSL证书验证。默认情况下&#xff0c;requests库会验证SSL…

在 Linux 系统上下载 Android SDK

使用ubuntu系统进行车机开发&#xff0c;今天开始配置环境&#xff0c;首先是下载android studio&#xff0c;然后下载android sdk&#xff0c;这里需要注意的是linux系统不能使用windows系统下的Android sdk&#xff0c;亲测会出现各种问题。 常规思路&#xff0c;下载sdk&am…