首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mybatis简介

一、MyBatis简介

1.1原始JDBC操作的分析

原始JDBC开发存在的问题如下:

:数据库创建连接,释放连接频繁操作,造成系统资源浪费从而影响系统性能。

:sql语句在代码中硬编码,造成代码不易维护;实际应用sql变化的可能较大,sql变动需要改变java代码。

:查询操作时,需要手动将结果集中的数据封装到实体类中。

应对上述问题给出的解决方案:

:使用数据库连接池初始化连接资源。

:将sql语句抽取到xml文件中。

:使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射。

1.2 MyBatis简介

MyBatis是一个优秀的基于ORM的半自动轻量级持久层框架,它对jdbc操作数据库的过程进行封装,

使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建

statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

半自动:MyBatis(推荐:可以对手动编写的sql语句进行优化)

全自动:hibernate

本质区别:是否需要手动编写sql语句

轻量级:程序在启动期间所需要消耗的资源的多少

MyBatis历史

MyBatis 本是apache的一个开源项目iBatis, 2010年6月这个项目由apache software foundation 迁移

到了google code,随着开发团队转投到Google Code旗下,iBatis正式改名为MyBatis ,代码于2013

年11月迁移到Github

Github地址:https://github.com/MyBatis/MyBatis-3/

1.2ORM思想

ORM(Object Relation Mapping) 对象关系映射

** O(对象模型):**

实体对象,即我们在程序中根据数据库表结构建立的一个个实体javaBean

** R(关系型数据库的数据结构):**

关系数据库领域的Relational(建立的数据库表)

** M(映射) **

从R(数据库)到O(对象模型)的映射,可通过XML文件/注解 映射

实现:

(1)让实体类和数据库表进行一一对应关系

先让实体类和数据库表对应

再让实体类属性和表里面字段对应

(2)不需要直接操作数据库表,直接操作表对应的实体类对象

ORM作为是一种思想

帮助我们跟踪实体的变化,并将实体的变化翻译成sql脚本,执行到数据库中去,也就是将实体的变化映射到

了表的变化。

MyBatis采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问

细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作 。

二、MyBatis快速入门

案例需求:通过MyBatis查询数据库user表的所有记录,封装到User对象中,打印到控制台上

2.1代码实现

(1) 创建user数据表

(2) 导入依赖坐标

(3) 编写User实体

(4) 编写UserMapper.xml映射文件

(5) 编写MyBatis核心配置文件

(6) 编写测试类

三、MyBatis映射配置文件概述

四、MyBatis增删改查

4.1 新增

(1)编写映射配置文件UserMapper.xml

(2) 编写测试类

4.2 修改

(1)编写映射配置文件UserMapper.xml

(2)编写测试类

4.3 删除

(1)编写映射配置文件UserMapper.xml

(2)编写测试类

五、MyBatis核心配置文件概述

5.1 MyBatis核心配置文件层级关系

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

配置文档的结构如下:以先后顺序呈现出来的,也就是每个标签的配置顺序的位置

5.2MyBatis常用配置解析

(1)environments标签

数据库环境的配置,支持多环境配置

(2)properties标签

实际开发种,习惯上将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties

(3)typeAliases标签

类型别名:为Java类型设置一个短的名字

为了简化映射文中Java类型设置,MyBatis框架为我们设置好一些常用类型的别名,如下图

自定义类设置别名

(4)mappers标签

作用就是加载映射配置的,加载方式有如下几种

六、MyBatis API概述

6.1 API介绍

(1)SqlSession工厂构建器SqlSessionFactoryBuilder

常用API:SqlSessionFactory build(InputStream inputStream)

通过加载MyBatis核心配置文件的输入流形式构建一个SqlSessionFactory对象

(2)SqlSession工厂对象SqlSessionFactory

SqlSessionFactory 有多个个方法创建SqlSession 实例。常用的有如下两个:

(3) SqlSession会话对象

SqlSession 实例在 MyBatis 中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。

执行sql语句的方法主要有:

操作事务的方法主要有

6.2 MyBatis基本原理介绍

七、MyBatis的dao层开发7.1 传统开发方式

(1)编写UserDao接口

(2)编写UserDaoImpl实现类

(3)编写UserMapper.xml映射配置文件

(4)核心配置文件SqlMapperConfig.xml

(5)测试

传统开发方式的问题

在实现类中,存在mybatis代码重复

实现类调用方法时,xml中的sql statement硬编码到Java代码中

问题全部出现在实现类中!

思考:能否只编写接口和映射配置文件呢?

7.2 代理开发方式(重点)

(1)介绍

采用 Mybatis 的基于接口代理方式实现持久层 的开发。基于接口代理方式的开发只需要程序员编写 Mapper 接口,Mybatis 框架会为我们动态生成实现类的对象。

这种开发方式需要我们遵守一定的规范

Mapper.xml映射文件中的namespace与mapper接口的全限定类名相同

Mapper接口方法名和Mapper.xml映射文件中定义的每个statement的id相同

Mapper接口方法的输入参数类型和mapper.xml映射文件中定义的每个sql的parameterType的类型相同

Mapper接口方法的输出参数类型和mapper.xml映射文件中定义的每个sql的resultType的类型相同

Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

(2)编写UserMapper接口

(3)编写UserMapper.xml文件

(4)测试

(5)补充

在核心配置文件中SqlMapConfig.xml文件中,引入映射配置文件的方式

(6)MyBatis基于接口代理方式的内部执行原理

我们的持久层现在只有一个接口,接口实际上是一种规范,并不是实际干活的,那么是谁在做查询的操作呢?

下面我们追踪源码看一下:

、通过追踪源码我们会发现,我们使用的mapper实际上是一个代理对象,是由MapperProxy代理产生的

、追踪MapperProxy的invoke方法会发现,其最终调用了mapperMethod.execute(sqlSession, args)

、进入execute方法会发现,最终工作的还是sqlSession

------------END-----------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20211006A02O7B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券