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


目录
打赏
0
4
4
1
49
分享
相关文章
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
27 2
解决Java环境中无法识别org.mybatis.spring.annotation.MapperScan的问题。
祝你好运,在这场MyBatis的魔法冒险中获得胜利!记住,魔法书(官方文档)永远是你最好的朋友。
65 18
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
67 1
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
128 0
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
130 1
Spring boot 使用mybatis generator 自动生成代码插件
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
144 0
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(下)
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(下)
282 0
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(下)
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(上)
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(上)
193 0
Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解(上)
|
13天前
|
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
56 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等