初识MyBatis

本节目标:

•  回顾 JDBC 编程及对比 ORM 模型

• 了解 MyBatis 的发展历程

• 学习搭建 MyBatis 开发环境

• 认识 MyBatis 的基本构成

• 掌握 MyBatis 的生命周期管理

JDBC

一、JDBC回顾

A     加载数据库驱动

B     创建数据库连接

C     执行SQL语句

D     关闭资源

二、JDBC的弊端 

JDBC 存在以下弊端:

1.代码繁琐,需重复编写连接、语句执行、结果集处理等代码。

        如每次查询都要重复一系列操作流程。

2.存在 SQL 语句硬编码,降低代码可读性和可维护性,数据库结构变化时修改困难。

3.类型转换复杂,从结果集获取数据时手动类型转换易出错。

4.缺乏对象映射,不能直接将数据映射为对象,手动赋值易导致数据不一致。

5.有数据库特定代码,不同数据库差异可能导致大量特定处理逻辑。

6.错误处理复杂,要捕获处理各种异常。

总之,由于这些弊端,实际开发中常使用 ORM 框架替代。

三、JDBC的实质

        JDBC 的实质是一种 Java API,为 Java 程序提供连接不同关系型数据库和执行数据库操作的标准统一接口。

        它是 Java 应用程序与数据库之间的桥梁,核心包括驱动程序管理、连接建立、语句执行和结果处理。JDBC 让 Java 开发者能不依赖特定数据库实现细节来访问和操作数据库。

ORM

四、为什么要有ORM模型?

        因为它能提高开发效率,降低数据库操作的复杂性,增强代码的可维护性和可读性,实现跨数据库平台的兼容性,减少代码错误,便于团队协作。

        可以实现类和表的映射、字段和属性的映射、Java数据类型和数据库数据类型映射、对象关系映射、继承关系映射、对象生命周期管理的映射。

五、什么是ORM模型

        ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。

六、常见的ORM模型

Mybatis和HIBERNATE

自动化与半自动化

七、Mybatis和hibernate 区别(重要)

1. Hibernate是全自动化ORM; Mybatis是半自动化ORM。

2. Hibernate简化dao层,不用考虑SQL语句的编写和结果映射,重点放在业务逻辑上;     Mybatis需要手写SQL语句以及结果映射。

3. Hibernate是一个重量级的框架,内部生成SQL语句,反射操作太多,导致性能下降;            Mybatis是一个轻量级的框架,需要自己写sql语句,有较少的反射操作。

4. Hibernate 不方便做SQL优化,遇到较复杂的SQL语句需要绕过框架实现复杂, 对多字段的结构进行部分映射困难;

        Mybatis 不仅可以做SQL优化还可以SQL与Java分离,还可以自行编写映射关系, 复杂的SQL语句Mybatis效率更高

Mybatis优势: 可以进行更细致的SQL优化;容易掌握

Hibernate优势:dao层开发比mybatis简单,mybatis需要维护SQL和结果映射

                            hibernate数据库移植性好

MyBatis

八、MyBatis 解决了jdbc 的问题(重要

1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

        解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

        解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

        解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象 解析比较方便。

       解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

九、 什么是MyBatis

        MyBatis是一款ORM模型,支持定制化 SQL、存储过程以及高级映射。可以使用简单的 XML 或注解来配置和映射 原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

十、为什么选择MyBatis

1.灵活性高:允许开发者编写自定义的 SQL 语句,能够精确控制数据的查询和操作逻辑。

2.轻量级:相较于一些全功能的 ORM 框架,MyBatis 的架构较为简单,资源消耗相对较少。

3.性能优化方便:由于可以手动编写 SQL ,能够针对特定的业务场景进行性能优化。

比如通过合理使用索引、分页等技术提高查询效率。

4.映射配置简单:通过简单的配置文件,就能实现 Java 对象与数据库表的映射。

5.易于与其他框架集成:可以很容易地与 Spring 等流行的框架整合,共同构建企业级应用。

6.可读性好:自定义的 SQL 语句更直观,易于理解和维护。

        总之,MyBatis 结合了手动 SQL 控制的灵活性和框架的便利性,适用于对性能和定制化有较高要求的项目

十一、MyBatis构建项目框架

1.创建项目并导如需要的jar包

特别注意除了导入MyBatis的jar包之外还需要导入 mysql的驱动包

2. 将配置文件放入项目

放入配置文件;主配置文件一定要放入,日志配置可以选择不放入

主配置文件内容

3.创建需要的代码文件

        实体类和 接口文件跟之前的jdbc一样,这里我们把 sql语句放到了sqlMapper文件中,让sql语句进入 到了配置文件中从而解决sql硬编码问题

4.sqlMapper.xml代码

除了sql语句之外其他的配置信息都可以在官方文档 进行参考编写

5.创建SqlSession

即用即关;打开的 SqlSession 要在使用后及时关闭。

十二、MyBaties生命周期(重要)

(1)读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。

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

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

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

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

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

(7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型 和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数 的过程。

(8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类 型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

十三、JDBC和MyBatis哪个好?(重要)

答:JDBC 和 MyBatis 哪个更好不能一概而论,取决于具体情况。

(1)JDBC 是标准接口,直接使用 SQL 操作,适用于简单小型项目或需精细优化的场景。

(2)MyBatis 有更高抽象和便利,允许自定义 SQL 且减少代码量,集成性好,适合复杂业务和灵活定制查询的项目。

项目规模小、操作简单且追求极致性能和灵活性,JDBC 可能更好。项目复杂、需定制查询并提高效率,MyBatis 可能更合适。选择要根据项目具体情况和团队技术偏好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷酷无情小美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值