mybatis初始化mysql_Mybatis 深入浅出 -- 初始化篇

Mybatis

本文从mybatis 初始化流程开始,根据源码逐步剖析

首先先思考一下这几个问题

Mybatis解决了什么问题? 无非是简化数据库操作、实现封装、让程序员更关注SQL本身、维护便利

它是如何解决这些问题的?

Mybatis是运行在什么样的环境下的?

它如何读取解析用户定义的配置信息?即如何初始化的

它的环境结构是什么样的?

在这一环境下如何 实现做增删查改

如何执行SQL

如何执行动态SQL

如何拼接查询参数等等

我知道了这些原理后,我能做些什么?

例如用 Mybatis来扩展一个分页插件

Mybatis存在哪些我觉得可以改进的地方

正经的分割线

带着这些问题,我们从一个TestCase开始

传统jdbc流程

注册驱动

获取连接

准备SQL执行statement

设置SQL参数

执行SQL,获取到结果集

解析结果集

依次关闭结果集,statement,数据库连接

Class.forName(Driver.class.getName());

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx?characterEncoding=utf-8", "root", "root");

PreparedStatement preparedStatement = connection.prepareStatement("select * from test where id=?");

preparedStatement.setString(1,"1");

ResultSet resultSet = preparedStatement.executeQuery();

while (resultSet.next()) {

String columnName1 = resultSet.getMetaData().getColumnName(1);

String columnName2 = resultSet.getMetaData().getColumnName(2);

System.out.println(columnName1+":"+resultSet.getString(1));

System.out.println(columnName2+":"+resultSet.getString(2));

}

resultSet.close();

preparedStatement.close();

connection.close();

Mybatis初始化,主体流程

解析config.xml,读取主配置文件,解析及下所有内容

获取 设置的 别名,对象工厂,对象反射信息

解析 各个mappers 信息, 包括:xml 和 注解形式, 封装成 MapperedStatement 放入Map中待用, 解析信息包括:

自定义的缓存标签设置解析

自定义的参数映射解析

resultMap标签映射配置

sql标签解析

解析各个CRUD 标签

先从一段测试代码开始,以xml配置为例(注解方式流程解析思想都相同)

注意 阅读 序号 (1)、(2)、(3)、(4)、(5)、(6)

Test.java

(1)通过SqlSessionFactoryBuilder构建mybatis初始化组件,见下一代码栏 解释

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(“xxx/mybatis.xml”);

// 使用一个SqlSession作为此次连接, 主要讲这儿,初始化流程

SqlSession sqlSession = sqlSessionFactory.openSession();

// 动态代理 执行SQL

CustomMapper mapper = sqlSession.getMapper(DemoMapper.class);

Map map = new HashMap<>();

map.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值