学习笔记:分析MyBatis框架-架构与映射

来源:互联网 发布:东华软件java笔试题 编辑:程序博客网 时间:2024/05/20 22:11

参考文献:《深入分析Java Web技术内幕》 - 第15章

一、MyBatis框架的层次结构

1.1 主要职责:

  • 根据JDBC规范建立与数据库的连接;
  • 通过反射打通Java对象与数据库参数交互之间相互转化的关系;

1.2 处理方式:
典型的交互式框架。先期准备好交互的必要条件,然后构建一个交互环境,在交互环境中划分成会话,每次会话都有一个环境。环境OK之后,就做好交换数据就妥了。

1.3 主要类

  • SqlMapClient:定义了客户端的操作行为,包括select、insert、update、delete。
  • SqlMapSession:定义了当前客户端在当前线程中的执行环境。可以共享使用,也可以自己创建,如果自己创建,结束时必须调用关闭接口进行关闭。
  • SqlMapExecutorDelegate:执行代理类。耦合了用户端的执行操作行为和执行环境,它有执行操作的所需要的数据,同时管理着执行操作以来的环境,可以看错是一个工具类。

二、MyBatis框架的设计策略

2.1 设计目的:
为了让开发者在执行SQL时对输入输出的数据的管理更加方便。
核心竞争力:方便的写出SQL和方便的获取SQL的执行结果。

2.2 SqlMap配置文件:
MyBatis框架的一个重要组成部分就是SqlMap配置文件,其核心是Statement语句。
MyBatis通过解析SqlMap配置文件得到所有的Statement执行语句,同时会形成ParameterMap、ResultMap两个对象,用于处理参数和经过解析后交给数据库处理的SQL对象。

2.3 Java类型到数据库类型的转换
数据映射的过程:根据在Statement中定义的SQL,解析出其中的参数,按照出现的顺序保存在Map集合中,并按照在Statement中定义的ParameterMap对象类型解析出参数的Java数据类型,根据其数据类型构建TypeHandler对象。

三、MyBatis框架的运行原理

首先,构建MyBatis的工作环境:
读取SqlMap配置文件,构建Statement对象集,创建SqlClient对象。这三步结束就把环境构建好了。接下来是整个过程的执行步骤。
Statement → 1**创建SqlMapSession**对象 → 从对象池里取出一个SessionScope对象 → 建立数据库连接 → 从对象池中取出一个RequestScope对象执行SQL语句 → 映射Java对象参数到ParameterMap&映射数据库列名ResultMap归还RequsetScope对象到对象池 → 释放数据库连接 → 归还SessionScope对象那个到对象池 → 销毁或共享SqlMapSession

四、MyBatis对SQL语句的解析

上文提到,MyBatis会把SqlMap配置文件解析成一个个Statement,其中包括ParameterMap、ResultMap,以及解析后的SQL。MyBatis构建好RequestScope执行环境后,就要将传过来的对象数据结合ParameterMap中的信息提取出一个参数数组,这个数组的顺序对英语SQL中参数的顺序,然后调用prepare额度Statement.setXXX(i,parameter)提交参数。
以上所说的解析,是指使用“#”形式指明参数,解析出来的sql中参数被“?”替换。(使用“#”指明参数,可以防止sql注入)

mybatis中的#和$的区别
#相当于对数据加上双引号,$相当于直接显示数据。

  1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.
  2. sqlorderbyuser_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
  3. #方式能够很大程度防止sql注入
  4. $方式无法防止Sql注入
  5. $方式一般用于传入数据库对象,例如传入表名
  6. 一般能用#的就别用$
  7. MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 shinee key钟铉 圭贤唱钟铉的歌i 钟雷 钟馗 钟馗传说 钟馗捉妖记 钟馗图片 钟馗嫁妹 钟馗捉妖 新天师钟馗 钟馗伏魔 钟馗捉鬼图 鬼王钟馗 钟馗之死 钟馗图 钟馗铭文 钟馗出装 钟馗传说2 天师钟馗之钟馗嫁妹 钟馗之眼 天师钟馗2 钟馗娘子 钟馗画像 钟馗妹妹 钟馗的妹妹 钟馗伏魔2 钟馗读音 钟馗护身符 钟馗怎么读 神仙道钟馗 阎王钟馗 钟馗纳福图 钟馗 阎王 钟馗六月雪 钟馗是谁 钟馗玩法 钟馗被动 天师钟馗金超群 钟馗伏魔雪妖魔灵 钟馗雪妖魔灵 钟馗怎么把人勾到身后