APP下载

基于ORM框架的数据库编程实践

2022-05-30尤德华翟高粤

客联 2022年7期

尤德华 翟高粤

摘 要:MyBatis是当今流行的ORM开发框架,它能解决大部分企业数据库应用开发的复杂性问题。对于Java开发人员来说,掌握ORM框架的基本使用,已是入职Java软件开发行业的必备技能之一。本文主要介绍MyBatis框架及其体系结构的基本内容及应用,并通过一个实例说明MyBatis框架的基本使用方法,以面向对象的方式来操作持久化对象,通过ORM框架的映射关系把面向对象的操作转换成底层的SQL操作。

关键词:MyBatis框架;ORM;对象关系映射;數据库编程

一、引言

MyBatis是当前主流的Java持久层框架之一,它是一种ORM框架,它的性能优异,具有高度的灵活性、可优化性和易于维护等特点,受到了广大互联网企业的青睐,是目前大型互联网项目的首选框架。MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。

二、相关理论

(一)ORM与MyBatis

MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO映射成数据库的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。

MyBatis框架也被称为ORM框架。所谓ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。ORM框架的工作原理如图1所示。

从图1可以看出,使用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,而ORM框架则会通过映射关系将这些面向对象的操作转换成底层的SQL操作。另外,MyBatis还可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,对于一些复杂的和需要优化性能的项目来说,使用MyBatis更加合适。

(二)MyBatis的工作原理

MyBatis的工作原理详见图2所示。从图2可以看出,MyBatis框架在操作数据库时,大体经过了8个步骤。

(1)读取MyBatis配置文件mybatis-congfig.xml文件,该文件作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,其中主要内容是获取数据库连接。

(2)加载映射文件Mapper.xml,该文件配置了操作数据库的SQL语句,但需要在mybatis-congfig.xml中加载才能执行,可以加载多个配置文件,每个配置文件对应数据库中的一张表。

(3)构建会话工厂,通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。

(4)创建SqlSession对象,由会话工厂创建SqlSession对象,该对象中包含了执行SQL的所有方法。

(5)MyBatis底层定义了一个Executor接口来操作数据库,它会根据SqlSessionFactory传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

(6)在Executor接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储映射的SQL语句的id、参数等。

(7)输入参数映射。

(8)输出结果映射。

三、MySql数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择MySQL作为网站数据库。

MySQL和MyBatis进行配合使用,兼容性好,开发效率高。

四、ORM编程实例

下面以一个查询实例来说明MyBatis的编程步骤。在许多项目的实际开发中,单条数据的简单查询经常被涉及。单条数据查询的性质是精确查询,接下来本文以一系列步骤的形式来说明如何使用MyBatis框架根据客户编号查询客户信息。

根据客户编号查询客户信息主要是通过查询客户表中的主键来实现的。

(1)在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个t_customer表,同时预先插入几条数据。

(2)在MyEclipse中,创建一个名为firstMyBatis的Web项目,将MyBatis的核心JAR包、lib目录中的依赖JAR包,以及MySQL数据库的驱动JAR包一同添加到项目lib目录下,并发布到类路径中。

(3)编辑MyBatis的log4j输出日志信息文件,通过该文件可以在控制台输出SQL语句。

(4)在src目录下,创建一个com.itheima.po包,在该包下创建持久化类Customer,并在类中声明id、username、jobs和phone属性,及其对应的getter和setter方法。

(5)在src目录下,创建一个com.itheima.mapper包,并在包中创建映射文件CustomerMapper.xml,部分核心代码如下。

<!--根据客户编号获取客户信息 -->

(6)在src目录下,创建MyBatis的核心配置文件mybatis-config.xml,部分核心代码如下。

<!--1.配置环境 ,默认的环境id为mysql-->

<!--1.2.配置id为mysql的数据库环境 -->

<!-- 使用JDBC的事务管理 -->

<!--数据库连接池 -->

value="jdbc:mysql://localhost:3306/mybatis" />

<!--2.配置Mapper的位置 -->

(7)在src目錄下,创建一个com.itheima.test包,在该包下创建测试类MyBatisTest,并在类中编写测试方法findCustomerByIdTest(),核心代码如下。

// 1、读取配置文件

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

// 2、根据配置文件构建SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 3、通过SqlSessionFactory创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 4、SqlSession执行映射文件中定义的SQL,并返回映射结果

Customer customer = sqlSession.selectOne("com.itheima.mapper"

+ ".CustomerMapper.findCustomerById", 1);

// 打印输出结果

System.out.println(customer.toString());

// 5、关闭SqlSession

sqlSession.close();

五、结论

本文首先对MyBatis框架的概念、特点和下载使用进行了描述说明,然后对MyBatis框架的工作原理进行了流程分析,最后通过一个简单的查找实例来演示MyBatis框架的基本使用。通过本文的学习,可以了解MyBatis的概念和作用,熟悉MyBatis的工作原理,并能使用MyBatis框架来完成基本的数据库操作。

参考文献:

[1]沃尔斯. Spring实战 [M]. 人民邮电出版社,2016.

[2]卡内尔. Spring开发三剑客[M],人民邮电出版社, 2020.

[3] 陈恒等. Spring Boot从入门到实战[M]. 清华大学出版社出版社,2020.