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


目录
相关文章
|
18天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
37 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
19天前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
35 4
|
19天前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
31 3
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
21天前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
24 3
|
24天前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
15 1
|
2月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
76 1
Spring 框架:Java 开发者的春天
|
2月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
2月前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
39 6
|
2月前
|
存储 算法 Java
🚀Java零基础-顺序结构详解 🚀
【10月更文挑战第11天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
36 6