mybatis框架的核心组件和作用是什么

编程实验

72人已加入

描述

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

MyBatis框架的优点

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

2. MyBatis是最简单的持久化框架,小巧并且简单易学。

3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

4. 提供XML标签,支持编写动态SQL语句。

5. 提供映射标签,支持对象与数据库的ORM字段关系映射。

MyBatis框架的缺点

1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

MyBatis框架适用场合

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。

对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

mybatis核心组件

mybatis的核心组件包括:SqlSessionFactoryBuilder(构造器)、SqlSessionFactory(工厂接口)、SqlSession(会话接口)、SQL Mapper(映射器)。接下来通过一张图来整体展示四个核心组件的关系:

mybatis

mybatis作用

一 SqlSessionFactoryBuilder(构造器)

(1)作用:根据配置信息或者代码来生成SqlSessionFactory

(2)实现原理:SqlSessionFactoryBuilder类负责构建SqlSessionFactory,通过源码分析,该类下提供了多个build的重载方法。其实这些方法可以归结为一个签名的方法,但是这些方法的参数不统一,为了方便调用,故重载了多个方法。如下图:

mybatis

究其根源,SqlSessionFactoryBuilder真正重载build方法只有如下三种,分别是InputStream(字节流)、Reader(字符流)、Configuration(类),字节流和字符流都是通过读取XML配置文件的形式创建SqlSessionFactory,而Configuration采用的是java代码方式创建SqlSessionFactory,我们一般常用的是读取配置文件的形式:

[java] view plain copypublic SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)

public SqlSessionFactory build(Reader reader, String environment, Properties properties)

public SqlSessionFactory build(Configuration config)

读取xml配置文件的方式构造SqlSessionFactory,构造过程中注入了configuration的实例对象,之后configuration实例对象解析XML配置文件来构建SqlSessionFactory,示例代码

[java] view plain copyString resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = null;

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

通过分析,SqlSessionFactoryBuilder创建SqlSessionFactory采用了建造者的设计模式,相信大家一定非常熟悉,这里SqlSessionFactoryBuilder扮演具体的建造者,Configuration类则负责建造的细节工作,SqlSession则是构造出来的产品。如下图所示

mybatis

二 SqlSessionFactory(工厂接口)

(1)作用:生产SqlSession会话

(2)实例代码:sqlSession = sqlSessionFactory.openSession();

三 SqlSession(会话)

(1)作用:1)获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果;2)通过update、insert、select、delete等方法,带上SQL的id来操作在XML中配置好的SQL,从而完成工作,与此同时它也支持事务,通过commit、rollback方法提交或者回滚事务。

(2)四大对象:

1)执行器(Executor):调度StatementHandler、ParameterHandler、ResultHandler等来执行对应的SQL。

种类:SIMPLE:简易执行器,默认执行器

REUSE:一种执行器重用预处理语句

BATCH:执行器重用语句和批量更新,针对批量专用的执行器。

执行过程:步骤一,MyBatis根据Configuration来构建StatementHandler

步骤二,使用prepareStatement方法,对SQL编译并对参数进行初始化

步骤三,调用prepareStatement的prepare()进行预编译和基础设置,再通过StatementHandler的parameterize()来设置参数并执行

步骤四,resultHandler再组装查询结果返回给调用者。

2)数据库会话器(StatementHandler):使用数据库的Statement(PrepareStatement)执行操作,四大对象的核心,起到承上启下的作用。

种类:SimpleStatementHandler:对应SIMPLE执行器

PrepareStatementHandler:对应REUSE执行器

CallableStatementHandler:对应BATCH执行器

3)参数处理器(ParameterHandler):用于SQL对参数的处理

4)结果处理器(ResultSetHandler):进行最后数据集(ResultSet)的封装返回处理。

(3)运行原理:SqlSession通过Executor(执行器)创建StatementHandler来运行的,具体原理请看下图

mybatis

四 Sql Mapper(映射器)

(1) 作用:1)定义参数、2)描述缓存、3)描述SQL语句、4)定义查询结果和POJO的映射关系

(2) 主要元素:通过一个表格简单介绍

mybatis

(3)引入映射器mapper的方法

1)用文件路径引入映射器

《mappers》

《mapper resource=“对应mapper接口全路径的配置文件”》

《/mappers》

2)用包名引入映射器

《mappers》

《mapper resource=“对应mapper接口包的全路基”》

《/mappers》

3)用类注册引入映射器

《mappers》

《mapper resource=“对应mapper接口类的路径”》

《/mappers》

4)用xml配置文件引入映射器

《mappers》

《mapper url=“file:///var/mappers+文件路径”》

《/mappers》

(4)引入映射器步骤

1)定义映射器接口RoleMapper.java

[java] view plain copypackage com.liming.domain.mapper;

import com.liming.domain.po.Role;

public interface RoleMapper{

public Role getRole(Long id);

}

2)对应映射器接口的配置文件RoleMapper.xml:定义mapper映射规则和SQL语句

[html] view plain copy<?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”>

3)在核心配置SqlMapConfig.xml文件中引入映射器

[html] view plain copy《?xml version=“1.0” encoding=“UTF-8” ?》

《!DOCTYPE configuration

PUBLIC “-//mybatis.org//DTD Config 3.0//EN”

“http://mybatis.org/dtd/mybatis-3-config.dtd”》

《configuration》

《!-- 别名定义 --》

《typeAliases》

《typeAlias alias=“role” type=“com.liming.domain.po.Role”/》

《/typeAliases》

《!--定义数据库信息,默认使用development数据库构建环境--》

《environments default=“development”》

《environment id=“development”》

《!--采用jdbc事务管理--》

《transactionMapper type=“JDBC”/》

《!--配置数据库链接信息--》

《dataSource type=“POOLED”》

《property name=“driver” value=“com.mysql.jdbc.Driver”/》

《property name=“url” value=“jdbc:mysql://localhost:3306/mybatis”/》

《property name=“username” value=“root”/》

《property name=“password” value=“****”/》

《/dataSource》

《/environment》

《/environments》

《!--定义映射器--》

《mappers》

《mapper resource=“com/liming/domain/mapper/roleMapper.xml”/》

《/mappers》

《/configuration》

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分