ORM
WIKI 中的解释. 画重点
Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data betweenincompatible type systems using object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to construct their own ORM tools.
ORM: 对象关系映射
作用: 在不同的系统之间做数据转换.
手段: 通过面向对象的语言
实际举例: 数据库是一套系统, 应用是一套系统. 两者之间数据的转换使用面向对象的语言.
再举个例子: 数据库里面保存 行记录: id 1, 苹果, 红色 用图形语言 (图形应该也是一种语言, 不用嘴说, 但每个人都能懂) 表现为??. 而用面向对象的语言来表达则是 Apple{ red }
MYBATIS 是否是一个合格的 ORM 框架?
用上面的定义来验证 MYBATIS.
1在我们实际使用 MYBATIS 的过程中, 涉及不同系统之间的数据转换. 数据库 - 应用程序
2使用面向对象的语言 Java 将数据库的数据转换为内存中的对象. 同时也能够将对象转变为内存中的数据.
通过以上两点得出结论. Mybatis 是一款满足 ORM 的工具.
MYBATIS 是如何做对象转换数据库数据的?
我们如何设计?
MYBATIS 是如何实现 ORM
从对象 ->数据 ->对象?
MYBATIS 是如何将数据转换为对象的?
读取 SQL 信息
读取查询参数对象 ->SQL 的信息
读取查询结果
说明:
SqlSessionFactoryBuilder: 构建 SqlSessionFactory
XMLConfigBuilder 读取 mybatis-config.xml
XMLMapperBuilder 读取 mybatis-config.xml 中的 < mappers>
XMLStatementBuilder 读取具体 Mapper 中的 select,insert,update,delete
MappedStatementBuilder 生成具体的 Statement
以上几个关键类, 完成了 ORM 框架的初始化
问题:
1, 创建时, 创建对象数量?
SqlSessionFactoryBuilder(1)--XMLConfigBuilder(1)
XMLConfigBuilder(1)--XMLMapperBuilder(N) 根据 < mapper 节点中的 xml 文件个数创建
XMLMapperBuilder(1)--XMLStatementBuilder(N) 每一个 select|insert|update|delete 会创建一个
XMLStatementBuilder(1)--MappedStatementBuilder(N) 每一个 select|insert|update|delete 会创建一个
2,XMLMapperBuilder,XMLStatementBuilder,MappedStatement.Builder 这三个对象创建的比较多, 何时回收?
查看代码:
MappedStatement.Builder 引用 mappedStatement
而 mappedStatement 被 config 引用. 所以不会销毁
- public static class Builder {
- private MappedStatement mappedStatement = new MappedStatement();
- XMLStatementBuilder
引用着 builderAssistant, 应该会被销毁?
- /**
- * @author Clinton Begin
- */
- public class XMLStatementBuilder extends BaseBuilder {
- private final MapperBuilderAssistant builderAssistant;
- private final XNode context;
- private final String requiredDatabaseId;
XMLMapperBuilder 应该会被销毁
- public class XMLMapperBuilder extends BaseBuilder {
- private final XPathParser parser;
- private final MapperBuilderAssistant builderAssistant;
- private final Map<String, XNode> sqlFragments;
- private final String resource;
本地测试将 jvm 参数调整为 -xms 50m -xmx100M 查看堆对象. 以上三个对象已经被回收
将内存设置大 - xmx 256m -xmx 1024m 后, 内存足够, 没有被回收
下一节 分析 如何将对象转换为可执行的 SQL
mybatis 关于 ORM 的使用以及设计(一)[ORM 的初始化]
来源: http://www.bubuko.com/infodetail-2929058.html