第八章 Mybatis及MybatisPlus

简介: MyBatis通过配置文件与映射文件构建SqlSessionFactory,创建SqlSession执行SQL。基于Executor与Mapped Statement实现参数映射、结果集处理,支持resultMap复杂映射、@Param传参及分页插件PageHelper、MyBatis Plus,提供一二级缓存机制,简化数据库操作。

1、系统架构流程

执行过程:

  1. mybatis配置
    mybatis-config.xml,名称可变,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在mybatis-config.xml中加载;
  2. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
  3. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行;
  4. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器;
  5. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id;
  6. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数;
  7. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
    2、结果集映射
    在 MyBatis 中,结果集映射是指将查询数据库得到的结果集映射到 Java 对象的过程。MyBatis 提供了 XML 配置和注解两种方式来进行结果集映射。
    1)使用xml的方式;则可以使用 resultType 或 resultMap ;其中 resultType可以直接指定类名即可。而 resultMap可以映射更加复杂的映射关系;包括 一对一(可以使用 association )、一对多(可以使用 collection )等复杂的关联关系。
    2)使用注解的方式;可以使用 @Select、 @Result 配合使用。
    3、mapper传参
    在 MyBatis 中,Mapper 接口中定义的方法可以接受参数来进行数据库操作。Mapper 方法可以接受多种类型的参数,包括基本数据类型、Java 对象、Map 等。
    1、在mapper接口中的方法形参前面使用 @Param 指定名称;然后在映射文件或者@Select 注解内直接使用 #{} 或者 ${} 获取;
    2、不使用 @Param ;那么直接在需要使用的sql语句中,参数的名称要写成 param1,param2。。。
    3、如果传递的是一个对象或者map类型;那么在sql也可以直接使用对象或map的属性或key名称
    4、xml常用配置
    MyBatis 的 XML 配置文件中包含了许多常用的配置项,这些配置项可以帮助你定义映射关系、SQL 查询、参数传递等。以下是一些 MyBatis XML 配置中常用的配置:
    1)数据源配置:配置连接数据库的信息,包括驱动类、URL、用户名和密码等。
    2)映射器配置:指定映射器文件或映射器接口的位置。
    3)类型别名配置:为 Java 类型指定别名,简化映射器文件中的使用。
    4)结果映射配置:定义 SQL 查询结果与 Java 对象之间的映射关系。
    5)SQL 查询配置:编写 SQL 查询语句,并指定参数类型、返回结果类型等。
    6)参数传递配置:定义方法参数传递方式,可以使用基本类型、Java 对象、Map 等作为参数。
    5、缓存机制
    MyBatis 提供了两级缓存(Local Cache 和 Second Level Cache)来满足不同的需求。
    1、Local Cache(本地缓存、一级缓存):
    ● Local Cache 是指在 SqlSession 范围内的缓存,它默认开启并且无法关闭。
    ● 在同一个 SqlSession 中,当执行相同的查询语句(包括参数相同)时,如果之前已经查询过相同的结果,那么会直接从本地缓存中获取数据,而不会再发送 SQL 查询到数据库。
    ● Local Cache 是基于 HashMap 实现的,它仅在当前 SqlSession 中有效,并且对于不同的 SqlSession 是隔离的。
    2、Second Level Cache(二级缓存):
    ● Second Level Cache 是指在 Mapper 范围内的缓存,它可以跨 SqlSession 共享数据。
    ● 如果开发者需要使用 Second Level Cache,需要在映射文件中进行配置。
    ● 当开启了 Second Level Cache 后,同一个 namespace 下的查询结果会被缓存起来,其他 SqlSession 也可以共享这部分数据,从而减少数据库查询次数。
    ● Second Level Cache 默认是关闭的,需要手动在映射文件中配置开启。
    6、分页插件
    MyBatis 中常见的分页插件有: PageHelper 和 MyBatis Plus 都是用于简化分页查询操作的工具,它们能够大大简化分页查询的代码编写,并提供了丰富的分页功能。两类插件都是基于Mybatis的拦截器实现;所以需要在使用之前添加对应的拦截器。而在使用的时候:
    ● PageHelper中使用的参考: `
    PageHelper.startPage(页号, 页大小);
    ● MybatisPlus中的使用参考:
    IPage userPage = userService.page(new Page<>(页号, 页大小));
    7、Mybatis-Plus常用API
    MyBatis Plus 是在 MyBatis 的基础上进行增强的工具,提供了丰富的 API 来简化数据访问层的开发。常见的api有如下图:
相关文章
|
SQL 缓存 Java
MyBatis-动态代理、执行器与缓存
概述 通过一条修改语句,我们来了解一下Mybatis的执行过程: 一般MyBatis在执行一条语句的时候会依次使用以下四个模块: 分别说下各个组件的作用 接口代理: 其目的是简化对MyBatis使用,底层使用动态代理实现。 Sql会话: 提供增删改查API,其本身不作任何业务逻辑的处理,所有处理都交给执行器。这是一个典型的门面模式设计。 执行器: 核心作用是处理SQL请求、事物管理、维护缓存以及批处理等 。执行器的角色更像是一个管理员,接收SQL请求,然后根据缓存、批处理等逻辑来决定如何执行这个SQL请求。并交给JDBC处理器执行具体SQL。 JDBC处理器:他的作用就是用于通过JDB
286 0
|
6月前
|
SQL 人工智能 API
LangChain 不只是“拼模型”:教你从零构建可编程的 AI 工作流
LangChain 不只是“拼模型”:教你从零构建可编程的 AI 工作流
752 8
|
5月前
|
JavaScript 前端开发 小程序
Vue为何能稳居前端框架主流宝座
自2014年发布以来,Vue凭借“低门槛、渐进式、生态完善、持续进化”四大优势,迅速崛起为前端主流框架。其简洁语法利于新手入门,灵活架构适配各类项目,配合Vue Router、Pinia、Vite等官方工具及丰富社区资源,大幅提升开发效率。Vue3采用Proxy响应式机制,性能飞跃,并通过Uni-app等支持多端部署,被字节、阿里等大厂广泛采用。无论是中小企业快速开发,还是大型复杂系统构建,Vue均展现出强大适应力与竞争力,成为前端技术栈的首选之一。
|
5月前
|
关系型数据库 应用服务中间件 Nacos
Nacos配置中心
本章详解Nacos配置中心实战:实现微服务配置统一管理,支持热更新、配置共享与优先级控制,并搭建高可用集群,提升系统稳定性。
|
负载均衡 Kubernetes 网络协议
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,继续探讨注册中心的原理及选型。文章详细介绍了Eureka、Nacos的工作机制与特点,并对比了Eureka、Nacos、Consul和Zookeeper在一致性协议、健康检查、负载均衡等方面的差异。最后根据不同的应用场景给出了注册中心的选型建议,帮助读者理解如何选择最适合的注册中心。
1314 100
|
11月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
899 0
|
SQL Java 数据库连接
MyBatis-Plus快速入门:从安装到第一个Demo
本文将带你从零开始,快速入门 MyBatis-Plus。我们将首先介绍如何安装和配置 MyBatis-Plus,然后通过一个简单的示例演示如何使用它进行数据操作。无论你是 MyBatis 的新手还是希望提升开发效率的老手,本文都将为你提供清晰的指导和实用的技巧。
3405 0
MyBatis-Plus快速入门:从安装到第一个Demo
|
12月前
|
安全 Java API
【Java性能优化】Map.merge()方法:告别繁琐判空,3行代码搞定统计累加!
在日常开发中,我们经常需要对Map中的值进行累加统计。}else{代码冗长,重复调用get()方法需要显式处理null值非原子操作,多线程下不安全今天要介绍的方法,可以让你用一行代码优雅解决所有这些问题!方法的基本用法和优势与传统写法的对比分析多线程安全版本的实现Stream API的终极优化方案底层实现原理和性能优化建议一句话总结是Java 8为我们提供的Map操作利器,能让你的统计代码更简洁、更安全、更高效!// 合并两个列表});简单累加。
1080 0
|
负载均衡 Java 开发者
Spring Cloud实战:构建分布式系统解决方案
Spring Cloud实战:构建分布式系统解决方案
|
Linux 开发工具 数据安全/隐私保护
CentOS7安装流程步骤详细教程
【8月更文挑战第22天】
4689 2
CentOS7安装流程步骤详细教程