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

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

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 也支持使用注解进行类似的映射配置,为开发人员提供了更多元化的选择。


目录
相关文章
|
3天前
|
存储 算法 安全
Java对象创建和访问
Java对象创建过程包括类加载检查、内存分配(指针碰撞或空闲列表)、内存初始化、对象头设置及初始化方法执行。访问方式有句柄和直接指针两种,前者稳定但需额外定位,后者速度快。对象创建涉及并发安全、垃圾回收等机制。
Java对象创建和访问
|
9天前
|
Oracle Java 关系型数据库
课时37:综合实战:数据表与简单Java类映射转换
今天我分享的是数据表与简单 Java 类映射转换,主要分为以下四部分。 1. 映射关系基础 2. 映射步骤方法 3. 项目对象配置 4. 数据获取与调试
|
1月前
|
存储 Java
Java中判断一个对象是否是空内容
在 Java 中,不同类型的对象其“空内容”的定义和判断方式各异。对于基本数据类型的包装类,空指对象引用为 null;字符串的空包括 null、长度为 0 或仅含空白字符,可通过 length() 和 trim() 判断;集合类通过 isEmpty() 方法检查是否无元素;数组的空则指引用为 null 或长度为 0。
|
2月前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
2月前
|
安全 Java
Object取值转java对象
通过本文的介绍,我们了解了几种将 `Object`类型转换为Java对象的方法,包括强制类型转换、使用 `instanceof`检查类型和泛型方法等。此外,还探讨了在集合、反射和序列化等常见场景中的应用。掌握这些方法和技巧,有助于编写更健壮和类型安全的Java代码。
55 17
|
2月前
|
安全 Java 数据库连接
Java使用MyBatis-Plus的OR
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。
85 20
|
2月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
161 6
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
93 2
|
2月前
|
Java
java代码优化:判断内聚到实体对象中和构造上下文对象传递参数
通过两个常见的java后端实例场景探讨代码优化,代码不是优化出来的,而是设计出来的,我们永远不可能有专门的时间去做代码优化,优化和设计在平时
38 15
|
2月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
111 1