MyBatis 的架构

2023-11-12

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 语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis 的架构 的相关文章

  • MyBatis - 找不到构造函数

    我在 MyBatis 映射方面遇到问题 我有一个像这样的域类 public class MyClass private Long id private Date create private String content MyClass L
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • 浅谈小程序开源业务架构建设之路

    一 业务介绍 1 1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态 我们的愿景是 定义移动时代最佳体验 建设智能小程序行业标准 打破孤岛 共建开源 开放 繁荣的小程序行业生态 百度智能小程序的生态玩家有三类 分
  • 【已解决】Redis序列化反序列化不一致 - String类型值多了双引号问题

    在项目中使用spring 的RedisTemplate从redis中获取数据的时候 发现字符串的value多了双引号 如下图所示 产生的原因可以分一下几个方面 一 采用的序列化对象不同 多服务之间调用时候 序列化服务A 向redis中写数据
  • mybatis中返回HashMap,并在spring MVC中作为ModelAttribute使用

    我想使用 spring mvc modelAttribute 在 Jsp 页面中显示类别列表 在我的 mapper xml 文件中是
  • mybatis动态sql里面注解

    我使用的是mybatis 3 我正在使用 select 注释在映射器接口内编写选择查询 Example Select select from EMPLOYEE where ID gt 55 public List
  • mybatis:使用SQL类的函数LIMIT、OFFSET指定从哪行开始查询、最多返回多少行

    org apache ibatis jdbc SQL类的OFFSET函数指定从哪行 行索引的位置 开始查询 LIMIT函数指定最多返回多少行 注意 第一行的行索引是0 而不是1 示例 mysql数据库user表的记录 mapper接口文件
  • 专车数据层架构进化往事:好的架构是进化来的,不是设计来的

    很多年前 读了 子柳 老师的 淘宝技术这十年 这本书成为了我的架构启蒙书 书中的一句话像种子一样深埋在我的脑海里 好的架构是进化来的 不是设计来的 2015 年 我加入神州专车订单研发团队 亲历了专车数据层 架构进化 的过程 这次工作经历对
  • Python 微服务架构指南

    概要 微服务架构作为一种设计风格 它将应用程序构建为一套小服务的集合 每个服务实现特定的业务功能 这些服务可以独立部署 扩展并围绕特定业务能力构建 Python 凭借其简洁易读的语法和强大的库生态系统成为实现微服务的受欢迎选择 本文将详细介
  • mybatis 增删改查

    MyBatis 是一种持久化框架 主要用于简化数据库访问代码的编写 它允许开发者使用 XML 或注解来配置 SQL 映射 并提供了自动将数据库操作映射到 Java 对象的功能 以下是 MyBatis 中的基本增删改查操作的示例 1 增加 I
  • 阿里技术官亲笔力作:Kafka限量笔记,一本书助你掌握Kafka的精髓

    前言 分布式 堪称程序员江湖中的一把利器 无论面试还是职场 皆是不可或缺的技能 而Kafka 这款分布式发布订阅消息队列的璀璨明珠 其魅力之强大 无与伦比 对于Kafka的奥秘 我们仍需继续探索 要论对Kafka的熟悉程度 恐怕阿里的大佬们
  • MyBatis SelectList 输出 CopyOnWriteArrayList

    请耐心解答新手问题 因为我正在尝试同时学习 MyBatis 和 java 我有一个应用程序需要使用线程安全变量 根据一些研究和我对如何使用应用程序的想法 我决定使用 CopyOnWriteArrayList 而不是 Vector 当我从 m
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Mybatis Generator:如何生成指定模式的所有表

    Mysql数据库总共有4个模式 我只想生成一个名为 booking 的指定模式 但它总是为所有模式生成所有表 所以我需要你的帮助 下面是我的generatorConfig xml
  • MyBatis 不返回查询的所有结果

    问题 我有一个返回 17 条记录的查询 当我将 MyBatis 与具有以下内容的地图一起使用时
  • Mybatis 3.0.5 嵌套集合映射示例

    我正在研究 MyBatis 3 0 5 的映射功能 运行嵌入式模式的数据库是H2 1 3 160 在用户手册的帮助下 我让简单的部分工作起来 但我很难绘制出Set使用一个HashMap作为后备存储 以下是自定义集合的 Java 代码 该集合
  • 使用 myBatis 从数据库中以 byte[] 的形式获取 blob

    我在一个项目中使用 spring MyBatis 1 2 0 其中有一个查询从 Oracle 11g 数据库中的 BLOB 字段获取数据 我想以字节数组 byte 的形式检索该字段 我的代码是
  • 使用 MyBatis 动态选择 SQL 语句

    我想在 Oracle 12g 数据库中使用 mybatis 进行动态 sql 语句 我可以利用哈希映射来添加如下条件
  • MyBatis Spring Boot 自定义类型处理程序

    我需要 Spring Boot 和 MyBatis 集成方面的帮助 我对自定义 BaseTypeHandler 有疑问 我创建了一个映射器 MappedTypes LocalDateTime class public class Local
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac

随机推荐

  • 过采样和欠采样问题(二分类数据不均衡)

    参考 知乎专栏 项目中出现了二分类数据不平衡问题 研究总结下对于类别不平横问题的处理经验 1 为什么类别不平衡会影响模型的输出 许多模型的输出类别是基于阈值的 例如逻辑回归中小于0 5的为反例 大于则为正例 在数据不平衡时 默认的阈值会导致
  • 六一儿童节-王者连连看

    庆祝六一 用java实现的连连看练手小游戏 王者连连看 游戏介绍 核心 总结 游戏介绍 王者连连看游戏的目标是通过消除相同的图案来得分并进入更高级别的挑战 游戏分为四个难度 可以自由选择也可以依次闯关 每次时间倒计时100秒 你需要在有效时
  • 图像处理、分析与机器视觉(基于labview)_基于3D技术的机器视觉解决方案

    当前机器视觉主流的检测手段还是依赖2D相机 即从灰度图中提取被测物特征 在X Y平面内进行测量 当遇到需要高度测量或需要Z方向信息 如需要测高度 测深度 测厚度 测平面度 测体积 测磨损等情况时 2D视觉往往无能为力 甚者在被测物灰度图像对
  • mysql--④多表操作

    文章目录 多表关系 外键约束概念 外键约束 验证外键约束的作用 删除外键约束 多表联合查询 非常重要 内连接查询 外连接查询 多表关系 一对一 一般是合并表 一对多 多对一 部门和员工 多对多 学生和课程 用中间表 外键约束概念 专门用于多
  • SpringMVC乱码问题的解决

    一 设置Tomcat过滤器 在web xml中添加过滤器 注意要在所有过滤器之前
  • c语言除号怎么打,C语言学习种除号问题出现奇怪错误

    include int main int first int second char operator scanf d c d first operator second if operator printf d first second
  • vue3.2 菜单, 路由跳转, elementplus

    1 属性加上router index是路由的跳转地址 2
  • 使用VMware Workstation搭建先电IaaS2.4基础服务私有云平台和创建云主机(参考先电2.4手册)

    1 前期准备与说明 使用搭建openstack私用云平台的软件 VMware Workstation16 使用的基础镜像 centos7 5 iso 使用搭建的iso镜像包 chinaskills cloud iaas iso 2 cont
  • 搭建http请求方式的git

    第一步 安装msysGit 百度下载 注意 安装时 要清除CopSSH在path中的配置 第二步 安装Apache服务器 注意 下载Window版的XAMPP 里面保括了Apache服务器 第三步 配置Apache服务器 注意端口冲突 和密
  • 记elementUI的popover出现在页面左上角

    找了好久找不到解决办法 给自己记一下 目标 出现在目标元素左侧 出现情况 出现在了页面左上方 产生原因 导入文件 文件导入后跟后端要上传失败的条数 封装了一个组件 只要有数字大于0 elpopover立马出现 但是向后端发起请求在导入成功十
  • Redis建集群时出现[ERR] Sorry, can‘t connect to node的错误

    Redis建集群时出现 ERR Sorry can t connect to node的错误 原因是由于Redis设置密码 无法连接 但由于Redis不设置密码容易被入侵 因此需要找到ruby中的配置文件加入密码的配置 先要安装ruby和r
  • mysql使用sql备份单个表

    1 复制表结构及数据 1 1第一种方式 create table A backup select from A 基于GTID复制会报错 1786 Statement violates GTID consistency CREATE TABL
  • androidx.lifecycle 中 ViewModelProviders 源码学习

    如果在学习 LiveData 其中需要ViewModelProviders 会出现爆红 找不到该类的方法 那是没有导入相关库 如下 implementation androidx lifecycle lifecycle viewmodel
  • 停止Tomcat报错:java.net.ConnectException: 拒绝连接 (Connection refused)

    问题描述 今天在部署项目时 发现停止tomcat的过程中抛出了异常 java net ConnectException 拒绝连接 Connection refused 几次尝试 项目中写的有定时任务 所以猜测是定时任务导致项目停止失败 解决
  • java操作excel表格详解

    在日常工作中 对Excel工作表格的操作处理可是多的数不清楚 下面是java语言对其的操作 有需要的小伙伴可以参考下 使用场景 1 将用户信息导出为excel表格 导出数据 2 将Excel表中的信息录入到网站数据库 习题上传 大大减轻网站
  • 【爬虫+可视化】Python爬取疫情数据,并做可视化展示

    知识点 爬虫基本流程 json requests 爬虫当中 发送网络请求 pandas 表格处理 保存数据 pyecharts 可视化 开发环境 python 3 8 比较稳定版本 解释器发行版 anaconda jupyter noteb
  • MPI 和OPENMP 混合编程 实现矩阵LU分解

    LU分解 将系数矩阵A转变成等价两个矩阵L和U的乘积 其中L和U分别是下三角和上三角矩阵 当A的所有顺序主子式都不为0时 矩阵A可以分解为A LU 且分解唯一 其中L是单位下三角矩阵 U是上三角矩阵 方法 使用openMP和MPI混合编程现
  • Jeesite开发平台限制用户多点登录

    Jeesite开发平台限制用户多点登录 授权查询回调函数 进行鉴权但缓存中无用户的授权信息时调用 Override protected AuthorizationInfo doGetAuthorizationInfo PrincipalCo
  • web前端性能优化

    1 图片处理 图片压缩 使用图片图片压缩 优化工具TinyPNG TinyJPG压缩图片 或者使用其Gulp 组件gulp tinypng结合到自动化构件流程中 图片格式转为base64 使用webpack的url loader 自动根据文
  • MyBatis 的架构

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