【Mybatis】搭建一个Mybatis框架需要做什么

Mybatis是一个半自动的ORM(对象关系映射)框架,它封装了JDBC的操作

首先了解一下JDBC的工作流程

Connection

通过DriverManger获得一个Connection(连接),一个Connection对象表示通过JDBC驱动与数据源建立的连接

connection的获取可以从两个方面获取

  • JDBC API中提供的DriverManager类获取
        Connection connection = DriverManager.getConnection(
          "jdbc:mysql://127.0.0.1:3306/data?user=root&password=123456");
  • DataSource接口的实现类获取
        DataSource dataSource = new UnpooledDataSource(
                "com.mysql.cj.jdbc.Driver",
                "jdbc:mysql://127.0.0.1:3306/data?user=root&password=123456&AllowPublicKeyRetrieval=true",
                "root","qwer1234");

Statement

statement中执行SQL语句

  • Statement 不支持输入参数,有sql注入的风险
  • PreparedStatement:增加了设置SQL参数的方法
  • CallableStatement:增加了调用存储过程以及检索存储过程调用结果的方法
不同Statement执行的方式

		Connection connection = DriverManager.getConnection("");
        String sql = "SELECT * FROM admin WHERE username = ? AND password = ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,"username");
        preparedStatement.setString(2,"password");
        ResultSet resultSet = preparedStatement.executeQuery();


        String sql2 = "SELECT * FROM admin WHERE username = 'username' AND password = 'passwor'";
        Statement statement2 = connection.createStatement();
        ResultSet resultSet2 = statement.executeQuery(sql);

ResultSet

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。 
 


Mybatis的工作原理

先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类

SqlSession

  • 接口层的核心对象就是SqlSession,SqlSession是应用和MyBatis打交道的桥梁,SqlSession上定义了一系列数据库操作方法,然后在收到请求的时候再去调用核心处理层模块来完成具体操作
  • 它包含了所有执行语句、提交或回滚事务以及获取映射器实例的方法。
  • SqlSession是MyBatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外观,目的是对外提供易于理解和使用的数据库操作接口

Executor(可扩展插件)

  • Executor是MyBatis的SQL执行器,MyBatis中对数据库所有的增删改查操作都是由Executor组件完成的。

StatementHandler(可扩展插件)

  • StatementHandler组件封装了对JDBC Statement的操作,例如设置Statement对象的fetchSize属性、设置查询超时时间、调用JDBC Statement与数据库交互等,StatementHandler内运用了适配器模式和策略模式的思想
  • SimpleStatementHandler :封装了JDBC的 Statement 对象
  • PreparedStatementHandler:封装了JDBC的 PreparedStatement 对象 (可添加sql参数)
  • CallableStatementHandler:封装了JDBC的 CallableStatement 对象

ParameterHandler(可扩展插件)

  • 当MyBatis框架使用的Statement类型为CallableStatement和PreparedStatement时,ParameterHandler用于为Statement对象参数占位符设置值

ResultSetHandler(可扩展插件)

  • ResultSetHandler封装了对JDBC中的ResultSet对象操作,当执行SQL类型为SELECT语句时,ResultSetHandler用于将查询结果转换成Java对象

TypeHandler(自定义转化处理器)

  • 处理JDBC类型与Java类型之间的转换

Configuration

用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这些信息时,也可以从Configuration对象中获取。

MappedStatement

  • MappedStatement用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中<select|update|delete|insert>等标签或者@Select/@Update等注解配置信息的封装。

MyBatis缓存

一级缓存

  • 一级缓存默认是开启的,而且不能关闭。
  • 一级缓存级别:参数 localCacheScope
    • SESSION 当指定localCacheScope参数值为SESSION时,缓存对整个SqlSession有效,只有执行DML语句(更新语句)时,缓存才会被清除
    • STATEMENT 当localCacheScope值为STATEMENT时,缓存仅对当前执行的语句有效,当语句执行完毕后,缓存就会被清空。

二级缓存

  • 默认二级缓存关闭
  • 作用域为 Namespaces
  • 当Namespaces内执行查询操作时,查询结果会缓存到二级缓存中,执行更新操作后,二级缓存会被清空。

第三方缓存

  • 支持使用第三方作为缓存

Mapper的生命周期

Mapper配置文件的读取和装载

Mapper代理的执行

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值