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


目录
相关文章
|
9月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1062 157
|
11月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
11月前
|
存储 人工智能 JavaScript
Java从作用域到对象高级应用​
本内容详细讲解了JavaScript中的作用域类型(函数作用域、块作用域、全局作用域)、作用域链、垃圾回收机制、闭包、变量提升、函数参数、数组方法、内置构造函数、对象高级知识、原型链、对象赋值、深浅拷贝、递归、异常处理及this指向等内容,全面覆盖JS核心概念与编程技巧。
133 0
|
Java 数据库连接 API
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对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
507 1
|
前端开发 Java 数据库连接
java bo 对象详解_全面解析 java 中 PO,VO,DAO,BO,POJO 及 DTO 等几种对象类型
Java开发中常见的六大对象模型(PO、VO、DAO、BO、POJO、DTO)各有侧重,共同构建企业级应用架构。PO对应数据库表结构,VO专为前端展示设计,DAO封装数据访问逻辑,BO处理业务逻辑,POJO是简单的Java对象,DTO用于层间数据传输。它们在三层架构中协作:表现层使用VO,业务层通过BO调用DAO处理PO,DTO作为数据传输媒介。通过在线商城的用户管理模块示例,展示了各对象的具体应用。最佳实践包括保持分层清晰、使用工具类转换对象,并避免过度设计带来的类膨胀。理解这些对象模型的区别与联系。
984 1
|
Java
深入JavaSE:详解Java对象的比较。
总的来说,Java对象的比较就像海洋生物的比较,有外在的,有内在的,有面对所有情况的,也有针对特殊情况的。理解并掌握这些比较方式,就能更好地驾驭Java的世界,游刃有余地操作Java对象。
672 12
|
12月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
236 0
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
410 23
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
797 1
|
12月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
342 0