MyBatis框架分析

一、架构图


二、IDE的快捷键设置(Eclipse)

Ctrl + Shift + T快速打开类型

Ctrl + 鼠标左键单击

Ctrl + T 查看实现类/实现方法

Ctrl + O快速查看和定位类的属性、方法

Ctrl + H全局搜索

Alt + ←代码导航之返回


三、四大组件

1.Executor代表执行器,由它来调度StatementHandler、ParameterHandler、ResultHandler等来执行对应的SQL。

2.StatementHandler作用是使用数据库的Statement(PreparedStatement)执行操作,起到承上启下的作用。

3.ParameterHandler用于SQL对参数的处理。

4.ResultHandler进行最后数据集(ResultSet)的封装返回处理的。


四、执行流程

1、加载配置文件到Configuration

2、构建SqlSessionFactory

3、打开SqlSession会话

4、Executor开始处理请求

5、SqlSource解析SQL语句

6、StatementHandler执行SQL语句

7、ParameterHandler设置参数

8、StatementHandler执行SQL语句

9、ResultSetHandler处理结果集


 五、映射数据类型

Configuration.typeHandlerRegistry属性

TypeHandlerRegistry.<init>()注册各种java->数据库的类型处理器

Configuration.typeAliasRegistry属性

TypeAliasRegistry.<init>()注册各种基本类型的别名


六、SQL执行流程

/*获取数据源对象(需要driverclassname、url、username、password)提升创建Connection的性能*/
//获取Configuration对象,从该对象中获取DataSource对象
//有了DataSource对象,就可以从该对象中获取Connection对象
             // 加载数据库驱动
             Class.forName(driverclassName);
                                 
             // 通过驱动管理类获取数据库链接connection = DriverManager
             connection = DriverManager.getConnection(url,username, password);
     
/*获取JDBC可以执行的SQL语句,其实此处获取的是BoundSql,此时其实调用的就是SqlSource的SQL解析功能*/
//从BoundSql中获取SQL语句
// 定义sql语句 ?表示占位符
             String sql = sqlStr;
//从MappedStatement对象中获取statement的类型:simple、prepared、callable
//根据不同的statement去创建不同的Statement对象
             // 获取预处理 statement
             preparedStatement = connection.prepareStatement(sql);
/*从BoundSql中获取参数集合信息List<ParameterMapping>
*遍历给参数赋值,先需要读取ParameterMapping中的属性名称从入参对象中获取指定属性的值
*调用JDBC代码,完成属性设置
*设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设preparedStatement.setString(1, "王五");执行statemement,并获取结果集ResultSet*/
             // 向数据库发出 sql 执行查询,查询出结果集
             rs = preparedStatement.executeQuery();
/*从MappedStatement对象中获取输出结果类型,也就是结果要映射的类型 
*遍历结果集,获取结果集中每一行的数据
*获取结果集中每一行每一列的数据,获取列的名称
*根据列的名称,通过反射,去设置要映射的java类型的指定属性值*/
             // 遍历查询结果集
             while (rs.next()) {
                 System.out.println(rs.getString("id") + " " + rs.getString("username"));
             }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值