15:MyBatis对象关系映射结构-与Java Spring

目录

  • 15.1 MyBatis
  • 15.2 MyBatis 对象关系映射
  • 15.3 MyBatis 结构
  • 15.4 MyBatis 的映射标记

15.1 MyBatis

MyBatis 是一款流行的 Java 持久层框架,用于简化与关系型数据库的交互。它提供了一种半自动化的 ORM(对象关系映射)解决方案,允许开发人员以灵活的方式编写动态 SQL,同时又保留了对 SQL 语句的直接控制权。MyBatis 将繁琐的 JDBC 层抽象出来,通过配置文件或注解描述数据库操作,使得应用程序与数据库之间的交互更为清晰、简洁。

主要特性

  • SQL 映射:通过 XML 或注解定义 SQL 查询语句,将 SQL 语句与 Java 方法关联起来。
  • 动态 SQL:支持动态拼接 SQL,可根据传入参数动态调整查询条件,简化复杂查询的编写。
  • 自动结果映射:根据配置自动将查询结果映射到 Java 对象,无需手动解析结果集。
  • 插件机制:提供插件接口,便于扩展功能,如日志记录、性能监控、事务管理等。
  • 与 Spring 集成:无缝集成 Spring 框架,支持 Spring 的依赖注入和事务管理。

15.2 MyBatis 对象关系映射

对象关系映射 (ORM) 是一种将关系型数据库的数据结构映射到对象模型的技术。在 MyBatis 中,ORM 主要体现在以下几个方面:

  • 实体类与表的映射:定义 Java 类(实体类)来表示数据库中的表,类的属性对应表的字段。
  • 对象关系:通过配置或注解描述实体类之间的关联关系,如一对一、一对多、多对多等。
  • 数据操作:通过映射文件或注解定义 CRUD(Create, Read, Update, Delete)操作对应的 SQL 语句,将数据库操作与 Java 方法关联。

关系映射示例

  1. 一对一映射:使用 <association> 标签定义,例如一个 Employee 实体类与一个 Department 实体类之间的一对一关系,查询员工时可以同时获取其所在部门的信息。
  2. 一对多映射:使用 <collection> 标签定义,如一个 Department 实体类包含多个 Employee 实体类的一对多关系,查询部门时可以同时获取其下属员工列表。
  3. 多对多映射:通常通过中间表实现,MyBatis 中同样使用 <collection> 标签配置,如 CourseStudent 之间的多对多关系,查询课程时可以获取选修该课程的所有学生列表。

15.3 MyBatis 结构

MyBatis 的基本结构包括以下几个核心组件:

  • SqlSessionFactoryBuilder:用于创建 SqlSessionFactory 实例的构建器,通过解析配置文件或配置类生成。
  • SqlSessionFactory:工厂类,用于创建 SqlSession 实例,是 MyBatis 工作的核心,包含了数据库连接信息、事务管理、映射器加载等配置。
  • SqlSession:会话接口,提供了执行 SQL 语句、获取映射器方法等功能。每个线程都应该有自己独立的 SqlSession 实例。
  • Mapper接口/映射器:定义了与数据库交互的方法签名,方法名与映射文件中的 SQL ID 相对应。通过 SqlSession 调用这些接口方法即可执行数据库操作。
  • 映射文件(XML 或注解):定义了 SQL 语句、结果映射、参数映射等信息,与 Mapper 接口方法对应。

执行流程简述

  1. 使用 SqlSessionFactoryBuilder 通过配置文件或配置类创建 SqlSessionFactory
  2. 通过 SqlSessionFactory 开启一个新的 SqlSession
  3. 通过 SqlSession 调用已映射的 Mapper 接口方法,执行 SQL 操作。
  4. 获取并处理查询结果,关闭 SqlSession

15.4 MyBatis 的映射标记

MyBatis 的映射标记主要用于 XML 映射文件中,用来描述 SQL 语句、结果映射、参数映射等信息。常见的映射标记包括:

  • <select><insert><update><delete>:分别定义 SELECT、INSERT、UPDATE、DELETE 类型的 SQL 语句。
  • <if>, <choose>, <when>, <otherwise>:用于构建动态 SQL,根据传入参数的条件决定是否包含某些 SQL 片段。
  • <where><set>:辅助动态 SQL,自动添加前置条件(WHERE)或更新字段(SET)的关键词。
  • <foreach>:遍历集合参数,生成 IN 条件或批量插入等语句。
  • <bind>:计算表达式并将结果绑定到一个变量,供 SQL 语句使用。
  • <resultMap>:定义结果集映射规则,包括如何将查询结果映射到 Java 对象的属性。
  • <association><collection>:在结果映射中用于描述一对一、一对多或多对多关联关系的映射。
  • <parameterMap><parameter>:(已过时,推荐使用 #{} 占位符)定义参数映射规则,如何将方法参数传递给 SQL 语句。

通过这些映射标记,开发人员可以清晰地定义 SQL 操作以及结果的处理方式,使得数据库交互逻辑与业务逻辑分离,提高代码的可读性和可维护性。同时,MyBatis 也支持使用注解进行类似的映射配置,为开发人员提供了更多元化的选择。

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

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

相关文章

羊大师分析,夏季羊奶的适合人群有哪些?

羊大师分析&#xff0c;夏季羊奶的适合人群有哪些&#xff1f; 夏季羊奶的适合人群相当广泛&#xff0c;主要包括以下几类人群&#xff1a; 生长发育中的孩子&#xff1a;羊奶富含营养&#xff0c;特别是蛋白质和矿物质&#xff0c;对孩子的生长发育有积极的促进作用。 中老年…

【HarmonyOS】Stage 模型 - 基本概念

一、项目结构 如图1所示&#xff1a; 图1 从项目结构来看&#xff0c;这个应用的内部包含了一个子模块叫 entry&#xff0c;模块是应用的基本功能单元&#xff0c;它里面包含源代码、资源、配置文件等。 像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类&am…

Python 异常处理与日志记录

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 异常处理是任何编程语言中的重要组成部分&#xff0c;Python 也不例外。Python 提供了丰富的…

换脸插件升级导致SDWebUI无法启动cannot import name ‘Undefined‘ from ‘pydantic.fields‘

今天在一台新的机器环境装了SDWEBUI&#xff0c;都使用最新的版本&#xff0c;升级了下换脸的插件&#xff0c;于是乎启动崩溃了。错误如下 Launching Web UI with arguments: --listen --skip-torch-cuda-test --disable-nan-check --skip-version-check --skip-python-versi…

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(三)多线程并发 Worker

Worker Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程&#xff0c;Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行&#xff0c;可以处理耗时操作但不可以直接操作UI。 Worker主要作用是为应用程序提供一个多线程的运行环境…

kanzi工程辅助解析

背景:实际开发过程中&#xff0c;使用kanzi studio工程&#xff0c;遇到一个很大的问题&#xff0c;就是在多工程&#xff0c;多预设件&#xff0c;复杂绑定算式情况下&#xff0c;很难梳理接口绑定情况&#xff0c;而且kanzi自带的查找很不好用。尤其是拿到一个新工程&#xf…

春季打卡圣地|超出片的成都文创产业园

春季拍照还在去人民公园、青龙湖吗&#xff1f;这个春天来点不一样的&#xff0c;就在金牛区的成都文创产业园——国际数字影像产业园旁&#xff0c;沙河源公园占地面积约150亩&#xff0c;地下室面积约4000平方米&#xff0c;这里的花能让摄影爱好者们拍个够。 国际数字影像产…

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

攻击者使用新型隐写术攻击,针对全球320个组织

隐写术是一种将数据隐藏在看似无害的文件中的技术&#xff0c;使用户和安全产品无法检测到它们。 近期&#xff0c;Positive Technologies 发现了TA558 黑客组织正在开展的一项新活动&#xff0c;使用隐写术将恶意代码隐藏在图像内&#xff0c;从而将各种恶意软件工具传递到目…

展会媒体邀约资源,媒体宣传服务执行

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 在组织展会时&#xff0c;媒体宣传服务的执行是提升展会知名度和影响力的关键环节。 确定目标媒体&#xff1a;根据展会的主题和目标受众&#xff0c;选择适合的媒体进行邀请。这可能包…

docker 虚拟化与docker的概念

一、云计算的三种服务模式 laas、pass、saas 1.1 IaaS: Infrastructure-as-a-Service&#xff08;基础设施即服务&#xff09; 第一层叫做IaaS&#xff0c;有时候也叫做Hardware-as-a-Service&#xff0c;几年前如果你想在办公室或者公司的网站上运行一些企业应用&#xff0c…

将彩色图转化为灰度图及其原理介绍

彩色图介绍 彩色图像是一种包含颜色信息的图像&#xff0c;通常由红色、绿色和蓝色&#xff08;RGB&#xff09;三个颜色通道组成。这三种颜色通道可以叠加在一起来形成各种不同的颜色。 彩色图像中的每个像素都有三个数值&#xff0c;分别表示红色、绿色和蓝色通道的强度或亮…

vue 关键字变红

1.html <div v-html"replaceKeywordColor(item.title)" ></div> 2.js //value为搜索框内绑定的值 replaceKeywordColor(val) {if (val?.includes(this.value) && this.value ! ) {return val.replace(this.value,<font color"red&…

RuoYi-Vue-Plus (SaToken 注解鉴权)

一、SaInterceptor 注解鉴权和路由拦截鉴权 拦截器&#xff1a;SaInterceptor 实现类位置&#xff1a; cn.dev33.satoken.interceptor.SaInterceptor 功能&#xff1a;Sa-Token 综合拦截器&#xff0c;提供注解鉴权和路由拦截鉴权能力 /*** 创建一个 Sa-Token 综合拦截器&…

重学java 19.面向对象 继承 上

走不出的那段阴霾&#xff0c;很多时候只不过是&#xff0c;我们把它当成了唯一 —— 24.4.22 面向对象整体知识导向&#xff1a; 知识梳理&#xff1a; 1.知道继承的好处 2.会使用继承 3.继承之后成员变量和成员方法的访问特点 4.方法的重写&#xff0c;知道方法重写的使用场景…

从构成看自来水厂自动化控制系统的创新与发展

自来水厂自动化控制系统涵盖了多个关键组成部分&#xff0c;包括水管理云平台、供水监控系统以及供水调度平台。 系统内嵌了一系列自主创新的核心算法&#xff0c;这些算法结合了数学建模、机器仿真和流体力学等多元数据模型&#xff0c;以优化设备间的关联和控制关系&#xf…

python爬虫 - 爬取html中的script数据(爬取新闻 36kr.com)

文章目录 1. 分析页面内容数据格式2. 使用re.findall方法&#xff0c;爬取新闻3. 使用re.search 方法&#xff0c;爬取新闻 1. 分析页面内容数据格式 打开 https://36kr.com/ 按F12&#xff08;或 在网页上右键 --> 检查&#xff08;Inspect&#xff09;&#xff09; 找…

大珩PPT助手一键颜色设置

大珩PPT助手最新推出的一键设置文字颜色和背景色功能&#xff0c;为用户在创建演示文稿时带来了更便捷、高效的体验。这一功能使用户能够轻松调整演示文稿中文字的颜色和幻灯片的背景色&#xff0c;以满足不同场合和主题的需要。 以下是该功能的几个关键特点和优势&#xff1a…

2024深圳杯东三省数学建模竞赛A题个火箭残骸的准确定位代码成品论文

问题重述 绝大多数火箭为多级火箭&#xff0c;下面级火箭或助推器完成既定任务后&#xff0c;通过级间分离装置分离后坠落。在坠落至地面过程中&#xff0c;残骸会产生跨音速音爆。为了快速回收火箭残骸&#xff0c;在残骸理论落区内布置多台震动波监测设备&#xff0c;以接收不…

账号安全基本措施2

sudo命令 sudo(superuser do)&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。 其配置在/etc/sudoers权。它允许系统管理员集中的管理用户的使用权限和使用的主机。属性必须为0440。 语法检查&#xff1a; 检查语法&#xff1a; 修改文件时&…