开发流程中少不了的ORM是什么?

2023-10-25 10:52
文章标签 流程 开发 orm 少不了

本文主要是介绍开发流程中少不了的ORM是什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

笔者在前段时间参加后端面试时遇到了这么一个场景,平时开发项目的时候用的都是Spring,Springboot框架,那肯定少不了Mybatis这样的ORM框架,请你说说这类ORM框架的好处是什么?


什么是ORM

在 Java 开发中,我们经常会使用 ORM(Object Relational Mapping,对象关系映射)框架技术,如 MyBatis、Hibernate 等。
使用这些 ORM 技术的目的是为了在 Java 应用程序中更方便地处理数据库操作,即OOP和关系型数据库的中间层,降低开发难度和提高开发效率。

为什么要使用 ORM 技术?

背景

例如我们想从数据库中获取一个user的信息,我们会执行SQL语句:

"SELECT id, name, email, country, phone_number FROM users WHERE id = 20"

上述代码会返回关于该user的部分信息(姓名,邮箱,国籍,电话号码),由where后的id条件进行筛选。
如果使用ORM工具,上述代码可以简化:

users.GetById(20)

注意,上述只是一种ORM的表达,不同工具的使用方式可能有细微的不同,但是大体思路都是一样的。

Java常用的ORM工具有哪些?

Hibernate

Hibernate 使开发人员能够遵循 OOP 概念(如继承、多态性、关联、组合)编写数据持久类。 Hibernate 具有高性能并且可扩展。

OpenJPA

Apache OpenJPA 也是一个 Java 持久性工具。 它可以用作独立的 POJO(普通旧 Java 对象)持久层。

Mybatis

Mybatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解进行配置和原生映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

Mybatis 的基本使用方式如下:
  1. 创建数据库表和对应的 Java 实体类。
  2. 创建 Mybatis 的配置文件(mybatis-config.xml),包括数据源、映射文件等配置。
  3. 编写 Java 接口,用于定义数据库操作的方法。
  4. 编写映射文件(mapper.xml),定义 Java 接口与数据库操作的映射关系,包括 SQL 语句和结果映射。
  5. 使用 Mybatis 提供的 API 进行数据库操作,如:SqlSessionFactory、SqlSession 等。
  6. 编写 Java 代码,调用 Mybatis 提供的 API 进行数据库操作,如:查询、插入、更新和删除等。
Mybatis 的优点包括:
  • 简单易用,学习成本低。
  • 良好的可扩展性,可以通过插件进行定制。
  • 支持定制化 SQL,可以灵活地实现复杂的业务逻辑。
  • 支持多种数据库,如:MySQL、Oracle、SQL Server 等。
Mybatis 的缺点包括:
  1. 相对于其他 ORM 框架,Mybatis 的性能可能较低。
  2. 配置繁琐,不够简便。
  3. 不支持一级缓存,不便于实现跨表查询。

Mybatis Plus

小结

使用ORM的优点

  1. 简化开发:ORM 技术将数据库操作封装成 Java 对象,使得开发者可以更轻松地编写 Java 代码来执行查询和更新数据库的操作。
  2. 提高可维护性:通过使用 ORM 技术,可以将复杂的 SQL 语句和数据库操作封装在对应的 Java 对象中,使得代码更易于理解和维护。
  3. 跨数据库兼容性:ORM 技术可以抽象出数据库操作的共性,使得代码可以在不同的数据库之间进行迁移,提高代码的复用性。

使用ORM的缺点

  1. 学习如何使用 ORM 工具可能非常耗时。
  2. 当涉及非常复杂的查询时,它们可能不会表现得更好。
  3. ORM 通常比使用 SQL 慢。

MyBatis 和 Hibernate 等 ORM 框架的底层实现逻辑:

  1. 映射配置:ORM 框架需要通过映射配置文件(如 MyBatis 的 XML 映射文件)来定义数据库表与 Java 对象的映射关系。
  2. 生成 SQL 语句:ORM 框架会根据映射配置和执行的数据库操作生成相应的 SQL 语句。
  3. 执行 SQL 语句:ORM 框架会通过 JDBC(Java 数据库连接)或其他数据库连接技术来执行生成的 SQL 语句。
  4. 返回结果:ORM 框架会将执行 SQL 语句的结果映射为 Java 对象,并返回给开发者。
  5. 事务管理:ORM 框架还需要处理数据库事务,确保数据库操作的一致性和完整性。
    总之,使用 ORM 技术如 MyBatis、Hibernate 等可以帮助 Java 开发者更高效地进行数据库操作,简化开发过程,提高代码的可维护性和可扩展性。

Java中如何使用Mybatis?

该案例展示了如何使用 Mybatis 进行 User 对象的查询,包括 ResultMap 的定义、Mapper 接口的定义以及 Java 代码的处理过程。

首先,我们创建一个 User 实体类:

public class User {  private Integer id;  private String username;  private String password;  private String email;// Getter and Setter methods  
}

接下来,我们创建一个UserMapper.java接口,定义一个方法用于查询 User:

import org.apache.ibatis.annotations.Mapper;  
import org.apache.ibatis.annotations.Select;
@Mapper  
public interface UserMapper {  @Select("SELECT * FROM users WHERE username = #{username}")  User getUserById(String username);  
}

然后,我们需要在application.properties文件中配置 Mybatis:

mybatis.type-aliases-package=com.example.demo.entity  
mybatis.mapper-locations=classpath:mapper/*.xml  

接着,我们创建一个UserMapper.xml文件,编写 SQL 查询语句:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.example.demo.mapper.UserMapper">  <resultMap id="UserResultMap" type="com.example.demo.entity.User">  <id column="id" property="id" />  <result column="username" property="username" />  <result column="password" property="password" />  <result column="email" property="email" />  </resultMap><select id="getUserById" resultMap="UserResultMap">  SELECT * FROM users WHERE username = #{username}  </select>  
</mapper>  

最后,我们创建一个 Java 类UserService,用于处理 Mybatis 读取的数据:

import com.example.demo.entity.User;  
import com.example.demo.mapper.UserMapper;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;
@Service  
public class UserService {  @Autowired  private UserMapper userMapper;public User getUserById(String username) {  User user = userMapper.getUserById(username);  return user;  }  
}

上述案例中,我们定义了一个getUserById方法,该方法会根据传入的username参数,从users表中查询对应的 User 对象。UserMapper.xml文件中定义了查询语句以及结果映射,将查询结果映射到User实体类中。最后,UserService类负责调用UserMapper接口中的getUserById方法,并返回查询到的 User 对象。


参考资料
What is an ORM – The Meaning of Object Relational Mapping Database Tools

这篇关于开发流程中少不了的ORM是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282080

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表