MyBatis相关知识

本文介绍了MyBatis,一个开源的JDBC替代方案,它支持定制化SQL和ORM,通过XML或注解配置SQL,减少代码量,但需注意SQL依赖性和SQL编写要求。讲解了如何开始使用MyBatis,包括核心配置、核心对象及生命周期管理。
摘要由CSDN通过智能技术生成

什么是MyBatis?

MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。

什么是持久化?


数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。例如,文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。

MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类 SQL 语句之间建立mapping映射关系,是一种半自动化的 ORM 实现。其封装性低于 Hibernate,但性能优秀、小巧、简单易学、应用广泛。

什么是ORM?

ORMObject Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。

MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。MyBatis与其它持久性框架最大的不同是,MyBatis 强调使用 SQL,而其它框架(例如 Hibernate)通常使用自定义查询语言,即 HQLHibernate查询语言)或EJB QLEnterprise JavaBeans查询语言)。

MyBatis优点:

MyBatis是免费开源的。

与JDBC相比,减少了50%以上的代码量。

MyBatis是最简单的持久化框架,体积小并且学习门槛低。

MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。

提供xml标签,支持编写动态SQL语句。

提供字段标签,支持实体对象与数据库的表字段的关系映射。

缺点:

编写SQL语句工作量较大,对开发人员的数据库SQL语句的功底有一定的要求。

SQL语句依赖于数据库,导致数据库的移植性差,不能随便更改数据库。

MyBatis快速开始:

第一步:准备工作

1.下载并添加MyBatis依赖Releases · mybatis/mybatis-3 · GitHub

2.创建数据库表结构

3.创建实体类

第二步:SQL映射文件

第三步:核心配置文件

MyBatis 核心配置文件主要用于配置数据库连接和 MyBatis运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性。

第四步:日志文件

MyBatis 默认使用 log4j 输出日志信息,如果开发者需要查看控制台输出的 SQL 语句,可以在 classpath 路径下配置其日志文件。

第五步:测试类

在 src 目录下创建一个名为com.apesource.test 的包,在该包中创建 MyBatisTest 测试类。在测试类中首先使用输入流读取配置文件,然后根据配置信息构建 SqlSessionFactory 对象。接下来通过 SqlSessionFactory 对象创建 SqlSession 对象,并使用 SqlSession 对象的方法执行数据库操作。

MyBatis核心对象

MyBatis 的核心接口和类包括:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession。

144422M58-0.png


使用步骤:
1首先,获取 SqlSessionFactoryBuilder对象,可以根据 XML 配置文件或者 Configuration 类的实例构建该对象。
2其次,通过 SqlSessionFactoryBuilder对象来获取 SqlSessionFactory 对象。
3最后,获取 SqlSessionFactory 对象之后,就可以进一步获取 SqlSession 实例。SqlSession 对象中完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句。

 

核心对象的生命周期和作用域

SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例。

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此 SqlSessionFactory 的最佳作用域是"应用作用域"。即随着应用程序的生命周期一直存在。这种“存在于整个应用运行期间,并且只存在一个对象实例”。例如使用单例模式。

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。 下面的示例就是一个确保 SqlSession 关闭的标准模式:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值